300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用多线程实现多客户端的连接(通过Socket实现TCP编程)

使用多线程实现多客户端的连接(通过Socket实现TCP编程)

时间:2022-11-28 08:12:17

相关推荐

使用多线程实现多客户端的连接(通过Socket实现TCP编程)

服务器线程类

package com.susu;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import .Socket;public class ServerThread implements Runnable{private Socket socket=null;public ServerThread(Socket socket){this.socket=socket;}@Overridepublic void run() {// TODO Auto-generated method stubInputStream is=null;InputStreamReader isr=null;BufferedReader br=null;try {//输入流is=socket.getInputStream();isr=new InputStreamReader(is);br=new BufferedReader(isr);String info=null;while((info=br.readLine())!=null){System.out.println("我是服务端,客户端说:"+info);}//关闭输入流socket.shutdownInput();//输出流OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("欢迎你!!");pw.flush();//关闭输出流socket.shutdownOutput();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//关闭资源try {if(br!=null)br.close();if(isr!=null)isr.close();if(is!=null)is.close();if(socket!=null)socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

服务端

package com.susu;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import .ServerSocket;import .Socket;public class Server {/*** 服务端*/public static void main(String[] args) {// TODO Auto-generated method stubtry {ServerSocket ss = new ServerSocket(2000);System.out.println("***服务器即将启动,等待客户端连接***");Socket socket = null;int count = 0;// 循环监听客户端的连接while (true) {socket = ss.accept();// 创建线程实例ServerThread serverThread = new ServerThread(socket);Thread thread = new Thread(serverThread);// 开启线程thread.start();System.out.println("客户端IP地址:"+ socket.getInetAddress().getHostAddress());System.out.println("已连接的客户端数:" + (++count));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

客户端:

package com.susu;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import .Socket;import .UnknownHostException;public class Client {public static void main(String[] args) {try {Socket socket=new Socket("127.0.0.1", 2000);//输出流OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("今天天气很好~");pw.flush();//关闭输出流socket.shutdownOutput();//输入流InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);BufferedReader br=new BufferedReader(isr);String info=null;while((info=br.readLine())!=null){System.out.println("我是客户端,服务器说:"+info);}//关闭资源pw.close();os.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

运行结果:

由于是客户端和服务端都是本机,IP地址一直不会变~~这样监听的也是连接数,不是客户端的个数。

如果要优化 可以通过IP地址来计算客户端的个数~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。