现在的位置: 首页 > 操作系统 > 正文

多线程TCP的socket通信

2020年02月10日 操作系统 ⁄ 共 2484字 ⁄ 字号 评论关闭

应用多线程来实现服务器与多客户端之间的通信。

基本步骤:

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内容请登录学步园。

抱歉!评论已关闭.