当前位置: 首页 > Web前端 > JavaScript

java实现多客户端聊天功能

时间:2023-03-26 23:58:22 JavaScript

java实现多客户端聊天(TCP),供大家参考,具体内容如下编程思路:1)要实现多客户端聊天,首先需要有多个客户端,而这些客户端需要随时发送和接收消息,所以发送和接收消息需要放在不同的线程中。2)多客户端聊天不是多个客户端之间的二对二通信,而是需要所有客户端都与服务器进行交互,然后服务器向参与聊天的其他客户端发送信息。代码实现:2.1实现专用于接收消息的子线程ReceiveThread。接收和发送消息分为两个线程。发送消息写入主线程,新开线程接收消息。导入java.io.BufferedReader;导入java.io.IOException;导入java.io.InputStreamReader;导入java.net.Socket;publicclassReceiveThreadextendsThread{privateSocket套接字;//私有成员变量,socketpublicReceiveThread(Socketsocket){this.socket=socket;}@Overridepublicvoidrun(){BufferedReaderbr=null;//使用缓冲字符输入流接收信息try{br=newBufferedReader(newInputStreamReader(socket.getInputStream()));}catch(IOExceptione){e.printStackTrace();}while(true){try{System.out.println(br.readLine());}catch(IOExceptione){e.printStackTrace();}}}}2.2客户端代码publicclassClient{@SuppressWarnings("all")publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{//ip:需要连接的服务器的ip//port:客户端连接的端口to必须和服务器端口一致Socketsocket=newSocket("192.168.*.*",8080);Scannerscan=newScanner(System.in);newReceiveThread(socket).start();//向服务器发送信息while(true){PrintStreamps=newPrintStream(socket.getOutputStream());ps.println("Numberone:"+scan.next());}}}注:1)、客户端代码可以在局域网下的多台电脑上运行,只需要更改ip地址改成服务器的ip,就可以连接到2)了。如果想用同一台电脑完成一台服务器和两个客户端的操作,测试多人聊天,可以创建客户端2,使用localipSocketsocket=newSocket("127.0.0.1",8080);Scannerscan=newScanner(System.in);newReceiveThread(socket).start();//向服务器发送信息while(true){PrintStreamps=newPrintStream(socket.getOutputStream());ps.println("No.2:"+scan.next());}2.3服务端接收和转发信息线程ServerThread当每个客户端连接时,服务端会生成一个线程,它是用来服务这个自定义的呃,负责接收这个客户发来的信息,并转发给参与多人聊天的其他客户。导入java.io.BufferedReader;导入java.io.IOException;导入java.io.InputStreamReader;导入java.io.PrintStream;导入java.net.InetAddress;导入java.net.Socket;导入java.util.Map.Entry;导入java.util.Set;公共类ServerThread扩展Thread{私有套接字套接字;publicServerThread(Socketsocket){this.socket=socket;}@Overridepublicvoidrun(){BufferedReaderbr=null;字符串str=空;尝试{br=newBufferedReader(newInputStreamReader(socket.getInputStream()));}catch(IOExceptione){e.printStackTrace();}while(true){try{str=br.readLine();//在服务器输出可以监听到大家的聊天信息。System.out.println(str);//发送到其他客户端Set>entrySet=Server.map.entrySet();for(Entryentry:entrySet){InetAddresskey=entry.getKey();套接字值=entry.getValue();if(socket.getInetAddress()!=key){PrintStreamprintStream=newPrintStream(value.getOutputStream());printStream.println(str);}}}catch(IOExceptione){e.printStackTrace();}}}}2.4服务端代码importjava.io.IOException;importjava.net.InetAddress;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.concurrent.ConcurrentHashMap;公共类服务器{@SuppressWarnings("all")publicstaticConcurrentHashMapmap=newConcurrentHashMap<>();publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{//创建服务端的ServerSocketServerSocketserver=newServerSocket(8080);而(真){//接收到客户端连接时创建对应的socketSocketsocket=server.accept();//获取客户端的ipInetAddressinetAddress=socket.getInetAddress();//客户端的ip和socket加载mapsetmap.put(inetAddress,socket);//创建一个新线程为客户端服务newServerThread(socket).start();}}}以上就是本文的全部内容,希望对大家的学习有所帮助