服务器:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author $KangMiao$
* 服务端
* 与TCPTalkClient02.java一起用
* 利用TCP/IP协议实现服务端与客户端的双向聊天
* 问题:①当服务端输入quit时 ,我输入的信息客户端接收不到,但可以看到客户端发来的信息。
* (已解决) 在两个线程中分别关闭相应的流
*/
public class TCPTalkServer02 {
public void talk() {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("聊天服务器开启···");
Socket s = null;
while ((s = ss.accept()) != null) {
System.out.println(s.getInetAddress()+"朋友来访中-----");
ThreadTalk tt = new ThreadTalk(s);
tt.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TCPTalkServer02 talk = new TCPTalkServer02();
talk.talk();
}
}
class ThreadTalk extends Thread {
private Socket s;
private BufferedReader br;
private BufferedReader brConsole;
private PrintStream ps;
private InetAddress ip;
public ThreadTalk(Socket s) {
this.s = s;
}
public void run() {
try {
br = new BufferedReader(new InputStreamReader(s
.getInputStream()));// 从客户端读取数据
brConsole = new BufferedReader(
new InputStreamReader(System.in)); // 从服务端读取数据
ps = new PrintStream(s.getOutputStream()); // 向客户端输入数据
//获得客户端ip地址
ip = s.getInetAddress();
ps.println("服务端传话:欢迎访问聊天服务器!");
TalkThread tat = new TalkThread(brConsole, ps);
tat.start(); // 这里用到多线程 实现双方互相对话
String temp = "";
while ((temp = br.readLine()) != null) {
if (temp.equalsIgnoreCase("quit")) {
System.out.println("与第" + ip+ "断开连接!");
ps.println("断开连接,欢迎下次访问!");
break;
}
System.out.println( ip+"说:" + temp);
}
} catch (IOException e) {
if("Connection reset".equals(e.getMessage())){
System.out.println("客户端异常退出!");
}
}finally {
try {
br.close();
System.out.println(ip+"已断开链接!");
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class TalkThread extends Thread {
private BufferedReader brConsole;
private PrintStream ps;
public TalkThread( BufferedReader brConsole,PrintStream ps) {
super();
this.brConsole = brConsole;
this.ps = ps;
}
public void run() {
String temp = "";
try {
while ((temp = brConsole.readLine())!= null) {
ps.println(temp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
brConsole.close();
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端:
/**
* @author $KangMiao$
* 客户端
* 与TCPTalkServer02.java一起用
* 建立TCP双向通信客户端
* 问题:①当客服端输入quit时 断开连接 但弹出异常,如下:
* (已解决)
* java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at com.wepull.task.zuoye11.TalkThred3.run(TcpClient.java:76)
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPTalkClient02 {
private Socket s;
private BufferedReader consBr; //控制台输入流
private PrintStream ps; //网络输出流
private BufferedReader br;
public void conn(){
try {
s = new Socket("localhost",8888);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
ps = new PrintStream(s.getOutputStream()); //写给服务端
consBr = new BufferedReader(new InputStreamReader
(System.in)); //从控制台读取数据
TalkThred4 tt = new TalkThred4(consBr,ps);
tt.start();
String temp1 = "";
while ((temp1 = br.readLine())!= null) {
if (temp1.equalsIgnoreCase("quit")) {
System.out.println("服务端与你断开连接!");
break;
}
System.out.println("服务端传话:" +temp1);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
ps.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TCPTalkClient02 tc = new TCPTalkClient02();
System.out.println("客户端连接中·········");
tc.conn();
}
}
class TalkThred4 extends Thread {
private BufferedReader consBr;
private PrintStream ps;
public TalkThred4( BufferedReader consBr,PrintStream ps) {
super();
this.consBr = consBr;
this.ps = ps;
}
public void run() {
String temp = null;
try {
while((temp = consBr.readLine())!=null){
ps.println(temp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
consBr.close();
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
实现了java socket编程基于tcp/ip协议的简单服务端,客户端通信,用于发送报文,接收解析报文。
其中网络通信部分采用流行的TCP/IP协议。程序采用典型的C/S(服务器/客户端)构架。用socket编程设计网络通讯。界面设计部分采用Windows MFC框架。数据库采用微软SQL Server。本文最终设计了一个简易版本的聊天软件,...
用C#写的简单的TCP/IP通信小示例,开发环境为VS2013,里面有一个服务端和一个客户端,适合新手看看
基于socket应用的TCP/Ip通讯。包含一个服务端,一个客户端。实现客户端与服务端通讯。
利用socket通过tcp/ip协议,实现客户端和服务端的相互通信,实例不复杂,适合刚刚接触网络编程的人参考一下
一个自己的小程序,适合初学者学习TCP/IP与Socket套接字的使用
基于winsock文件传输的C++文件传输实现,TCP/IP协议,服务端和客户端都有,简单易学
基于TwinCAT软件的倍福PLC中TCPIP协议通信程序,包括服务端,客户端程序
**TCP/IP协议集和OSI层 TCP通信流程图 本人作为一个初学者,在这里只谈谈自己的一点点小理解。 服务端 第一 套接字的创建,其实有了解过udp的人应该知道这两者在一些方面还是差不多的,你需要创建一个socket()对象 ...
1、支持TCP/IP协议的网络通信,TCP服务端和客户端,可单条发送,循环发送,模拟多客户端发送; 2、支持HTTP协议的网络通信, HTTP协议的服务端和客户端连接测试工具; 3、网络扫描工具,可扫描主机端口及扫描局域网内的...
两个用户如果同时在线,采用点到点通信方式进行聊天,信息不需要通过服务器中转,服务器也不保存(基于TCP协议); 支持离线消息(基于TCP协议); 支持点到点可靠文件传输(基于UDP协议); 存储在服务器端的数据...
首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!...
1、支持TCP/IP协议的网络通信,TCP服务端和客户端,可单条发送,循环发送,模拟多客户端发送; 2、支持HTTP协议的网络通信, HTTP协议的服务端和客户端连接测试工具; 3、网络扫描工具,可扫描主机端口及扫描局域网内的...
用SOCKET实现服务端与客服端通讯!代码很简单带有中文注释。
本文介绍了在Windows 操作系统下基于TCP/IP 协议Socket 套接口的通信机制以及多线程编程知识与技巧,并给出多线程方式实现多用户与服务端(C/S)并发通信模型的详细算法,最后展现了用C++编写的多用户与服务器通信的...
1.加深对TCP/IP协议的理解; 2.掌握用Socket编程实现聊天工具。...使用system.net类库,可快速地开发各种网络应用程序,而Socket通信是基于TCP/IP协议。从而应用基于system.net开发一对一聊天程序。
本程序为基于C/S模式的网络聊天程序,采用TCP/IP协议,根据“WinSockets规范“编写而成。它实现了聊天的基本功能,支持多个客户端以不同的用户名同时登录服务器,每个客户端可以随时同服务器断开。 服务端方面也添加...
是一个TCP 简单的客户/服务器通信程序实例,是面向连接的TCP协议。客户端在向服务端发出请求后接受并显示服务端的数据,并且给服务端也发送数据。
利用TCP/IP协议,使用Socket在Android端与服务端进行简单的输入通讯
本文实例讲述了Python 网络编程之TCP客户端/服务端功能。分享给大家供大家参考,具体如下: demo.py(TCP客户端): import socket def main(): # 1. 创建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET...