好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java Socket实现简易聊天室

Java-Socket编程实现简易聊天室(TCP),供大家参考,具体内容如下

实现一个服务器接收多个客户端

测试:

首先启动服务器,然后启动三个客户端,输入三个不同的用户名,分别在聊天室发消息
看其他客户端是否能接收到消息

效果如下图:

一号发消息

可以在二号和三号客户端接收到消息

服务器设计

import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . io . PrintWriter ; import java . net . ServerSocket ; import java . net . Socket ; import java . util . ArrayList ; import java . util . List ; import java . util . concurrent . ExecutorService ; import java . util . concurrent . Executors ;   public class Server1 {   static public List < Client > list = new ArrayList < Client >();   static ExecutorService cachedThreadPool = Executors . newCachedThreadPool ();   public static void main ( String [] args ) { //创建一个ServerSocket监听端口 try ( ServerSocket server = new ServerSocket ( 5678 )) {   while ( true ) { // 利用死循环不停的监听端口   Socket s = server . accept (); // 利用Socket服务器的accept()方法获取客户端Socket对象。 addClient ( s );   }   } catch ( IOException e ) { e . printStackTrace (); } }   // 添加客户端 private static void addClient ( Socket s ) { String name ;   try { BufferedReader in = new BufferedReader ( new InputStreamReader ( s . getInputStream ())); name = in . readLine (); Client c = new Client ( name , s ); // 创建客户端处理线程对象 System . out . println ( name ); list . add ( c );   cachedThreadPool . execute ( c );   } catch ( IOException e ) { e . printStackTrace (); } }   static class Client implements Runnable {   String name ; // 客户端名字 Socket s = null ; // 保存客户端Socket对象   BufferedReader in ; PrintWriter out ;   Client ( String name , Socket s ) {   this . s = s ; this . name = name ;   try { in = new BufferedReader ( new InputStreamReader ( s . getInputStream ())); out = new PrintWriter ( s . getOutputStream ()); } catch ( IOException e ) { // TODO Auto-generated catch block e . printStackTrace (); } }   @Override public void run () { try { while ( true ) { String str = in . readLine (); for ( int j = 0 ; j < list . size (); j ++) { Server1 . Client c = list . get ( j ); if ( c != this ) { System . out . println ( str ); c . send ( str + "-|1|2|-" + name ); } }   if ( str . equals ( "end" )) break ; }   try { s . close (); } catch ( IOException e ) { // TODO Auto-generated catch block e . printStackTrace (); } } catch ( IOException e1 ) { // TODO Auto-generated catch block e1 . printStackTrace (); } }   public void send ( String str ) throws IOException { out . println ( str ); out . flush (); } } }

客户端设计

import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . io . PrintWriter ; import java . net . Socket ; import java . util . Scanner ;   public class Client1 { public static String name = null ; static Socket socket = null ;   static BufferedReader in ; static PrintWriter out ;   public static void main ( String [] args ) { Scanner sc = new Scanner ( System . in );   System . out . print ( "输入用户名:>" ); name = sc . nextLine ();   try { // socket = new Socket("116.62.173.212", 5678); socket = new Socket ( "127.0.0.1" , 5678 );   System . out . println ( socket );   System . out . println ( "已连接服务器>" );   out = new PrintWriter ( socket . getOutputStream ()); in = new BufferedReader ( new InputStreamReader ( socket . getInputStream ()));   Thread receive = new Thread ( new receiveThread ()); receive . start ();   out . println ( name ); out . flush ();   String msg ;   while ( true ) { // System.out.print("你说:>"); msg = sc . nextLine ();   out . println ( msg ); out . flush ();   if ( msg . equalsIgnoreCase ( "end" )) break ; }   } catch ( IOException e ) { e . printStackTrace (); } }   static class receiveThread implements Runnable {   @Override public void run () { try { while ( socket != null ) {   String str = in . readLine (); String message = str . split ( "-\\|1\\|2\\|-" )[ 0 ]; String name = str . split ( "-\\|1\\|2\\|-" )[ 1 ]; System . out . println ( name + ":>" + message );   } } catch ( Exception e ) { e . printStackTrace (); } } } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/qq_42843894/article/details/114793283

查看更多关于Java Socket实现简易聊天室的详细内容...

  阅读:13次