热门 API 大全分享(含天气、物流等)
277
2022-09-06
使用多线程实现多客户端的连接(通过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 java.net.Socket;public class ServerThread implements Runnable{ private Socket socket=null; public ServerThread(Socket socket){ this.socket=socket; } @Override public void run() { // TODO Auto-generated method stub InputStream 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 block e.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 block e.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 java.net.ServerSocket;import java.net.Socket;public class Server { /** * 服务端 */ public static void main(String[] args) { // TODO Auto-generated method stub try { 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 block e.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 java.net.Socket;import java.net.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 block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
运行结果:
由于是客户端和服务端都是本机,IP地址一直不会变~~这样监听的也是连接数,不是客户端的个数。
如果要优化 可以通过IP地址来计算客户端的个数~~
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~