应用多线程来实现服务器与多客户端之间的通信。
基本步骤:
1.服务器端创建ServerSocket,循环调用accept()等待客户端的连接
2.客户端创建一个socket并请求和服务器端的连接
3.服务器端接收客户端的请求,创建socket与该客户端建立专线连接
4.建立连接的两个socket在一个单独的线程上对话
5.服务器端继续等待新的客户端的连接
Server.java
publicclassServer{
publicstaticvoidmain(String[]args)throwsIOException{
//1、创建一个服务器端的socket,指定绑定的端口,并侦听此端口
ServerSocketserver =newServerSocket(8888);
System.out.println("********服务端即将启动,等待客户端的连接********");
intcount =0;
//2、开始侦听,等待客户端的连接
while(true){
Socketsocket =server.accept();
ServerThreadthread =new ServerThread(socket);
thread.start();
count++;
System.out.println("客户端的数量:"+count);
InetAddressaddress=socket.getInetAddress();
System.out.println("客户端的ip:"+address.getHostAddress());
}
}
}
ServerThread.java
publicclassServerThreadextendsThread{
//和本线程相关的socket
Socketsocket=null;
publicServerThread(Socketsocket){
this.socket=socket;
}
//线程执行操作,响应客户端的请求
publicvoidrun(){
InputStreamis =null;
InputStreamReaderisr =null;
BufferedReaderbr =null;
OutputStreamos =null;
PrintWriterpw =null;
try{
//3、获取输入流,用来读取客户端发送的信息
is =socket.getInputStream();//字节输入流
isr =newInputStreamReader(is);//字符输入流
br =newBufferedReader(isr);//缓冲输入流
Stringinfo =null;
while((info=br.readLine())!=null){
//循环读取数据
System.out.println("客户端说:"+info);
}
socket.shutdownInput();//关闭输入流
os =socket.getOutputStream();//字节输出流
pw =newPrintWriter(os);//打印输出流
pw.write("服务器端已接受你的请求,允许登录");
pw.flush();
socket.shutdownOutput();
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
//4、关闭资源
if(pw !=null)
pw.close();
if(os !=null)
os.close();
if(br !=null)
br.close();
if(isr !=null)
isr.close();
if(is !=null)
is.close();
if(socket!=null)
socket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
Client.java
publicclassClient{
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{
//1、创建客户端socket,指定服务器地址和端口
Socketsocket =newSocket("127.0.0.1",8888);
System.out.println("******客户端已准备就绪*******");
//2、给服务端发送数据
OutputStreamos =socket.getOutputStream();//字节流
PrintWriterpw =newPrintWriter(os);//打印流
pw.write("用户名:admin;密码:123456");
pw.flush();
socket.shutdownOutput();//关闭输出流
InputStreamis =socket.getInputStream();//字节输入流
InputStreamReaderisr =newInputStreamReader(is);//字符输入流
BufferedReaderbr =newBufferedReader(isr);//缓冲输入流
Stringinfo =null;
while((info=br.readLine())!=null){
System.out.println("服务端说:"+info);
}
socket.shutdownInput();//关闭输入流
//3、关闭资源
br.close();
isr.close();
is.close();
pw.close();
os.close();
socket.close();
}
}
本文永久更新链接地址:http://www.xuebuyuan.com/Linux/2017-01/139876.htm
以上就上有关多线程TCP的socket通信的相关介绍,要了解更多多线程TCP,socket通信,多线程TCP的socket通信,编程,Linux编程,Linux Shell,Android,Android教程,JAVA,C语言,Python,HTML5内容请登录学步园。