Java SE实现多人聊天室功能

  

本文实例为大家分享了Java SE实现多人聊天室功能的具体代码,供大家参考,具体内容如下

  

<>强实现功能:
  

  

1。实现用户注册上的线,下线

  

2。实现群聊和私聊功能

  

3。实现统计当前在线人数

  

<>强实现思路:
  

  

1。首先,要实现服务端与客户端之间的连接

  

这里是使用套接字建立TCP连接:

  

(1)服务器端先实例化一个描述服务器端口号的考察对象

  

(2)客户端要创建插座对象来连接指定的服务器端

  

(3)服务器端调用ServerSocket类的接受()方法来监听连接到服务器端的客户端信息

  

(4)若服务器端与客户端连接成功,双方将返回一个套接字对象,此时双方可以进行通信

  

(5)服务器端与客户端使用I/O流进行连接,服务端的输出流连接客户端的输入流,客户端的输出流连接服务端的输入流

  

(6)使用close()方法关闭套接字(一定要记得关闭)

  

2。因为是拥有一个服务端来实现多个客户端的连接,此处还要解决的是多线程的问题。

  

每个客户端需要两个线程,来分别处理向服务端发送消息和向服务端接收消息

  

而服务端,当每增加一个客户端与服务端连接,服务端都要多创建一个线程来处理与客户端的连接

  

<强>具体代码:
  

  

单线程实现:

  

客户端         进口java.io.IOException;   进口java.io.PrintStream;   进口java.net.Socket;   进口java.util.Scanner;/* *   * @author LXY   * @qq.com 403824215   * @date 2018/7/20 15:46   *///客户端   公开课SingleClient {   公共静态void main (String [] args)抛出IOException {//客户端连接服务器,返回套接字套接字对象   Socket套接字=新的套接字(127.0.0.1,6666);//获取服务端的输出流,向服务器端输出内容   PrintStream PrintStream=new PrintStream (socket.getOutputStream ());   printStream。println(“我是客户端”+ socket.getLocalPort ());//获取服务器端的输入流,读取服务器端的内容   扫描仪扫描仪=new扫描仪(socket.getInputStream ());   scanner.useDelimiter (“\ n”);   如果(scanner.hasNext ())   {   System.out.println (scanner.next ());   }//关闭流   socket.close ();   }   }      

服务端         进口java.io.IOException;   进口java.io.PrintStream;   进口java.net.ServerSocket;   进口java.net.Socket;   进口java.util.Scanner;/* *   * @author LXY   * @qq.com 403824215   * @date 2018/7/20 15:34   *///服务端   公开课SingleServer {   公共静态void main (String [] args)抛出IOException {//创建服务器端的考察对象,等待客户端进行连接   ServerSocket ServerSocket=考察(6666);   System.out.println(“服务器的端口号为6666,等待客户端连接…”);//侦听并接收服务器端的连接,返回套接字套接字对象   Socket套接字=serverSocket.accept ();//获取客户端的输入流,读取客户端的输入内容   扫描仪扫描仪=new扫描仪(socket.getInputStream ());   scanner.useDelimiter (“\ n”);   如果(scanner.hasNext ())   {   系统。println(“客户端发来消息:“+ scanner.next ());   }//获取客户端的输出流,向客户端输出内容   PrintStream PrintStream=new PrintStream (socket.getOutputStream ());   printStream。println(“客户端你好,我是服务器端:“+ serverSocket.getLocalPort ());//关闭流   serverSocket.close ();   }   }      

<强>多线程实现

  

客户端         进口java.io.IOException;   进口java.io.PrintStream;   进口java.net.Socket;   进口java.util.Scanner;/* *   * @author LXY   * @qq.com 403824215   * @date 2018/7/20 15:55   *///客户端//客户端读取服务器端信息的线程   类ClientReadServer实现Runnable   {   私人Socket套接字;      公共ClientReadServer (Socket套接字)   {   这一点。套接字=套接字;   }      公共空间run () {   尝试{   扫描仪扫描仪=new扫描仪(socket.getInputStream ());   而(scanner.hasNext ())   {   System.out.println (scanner.next ());   }   socket.close ();   }捕捉(IOException e) {   e.printStackTrace ();   }   }   }//客户端向服务端发送信息的线程   类ClientSendServer实现Runnable   {   私人Socket套接字;      公共ClientSendServer (Socket套接字)   {   这一点。套接字=套接字;   }      公共空间run () {   尝试{   PrintStream PrintStream=new PrintStream (socket.getOutputStream ());   扫描仪扫描仪=new扫描仪(系统);   而(真)   {   字符串味精=零;   如果(scanner.hasNext ())   {   味精=scanner.next ();   printStream.println(味精);   }   如果(msg.equals(“再见”))   {   scanner.close ();   printStream.close ();   打破;   }   }   }捕捉(IOException e) {   e.printStackTrace ();   }      }   }      公开课MultiClient {   公共静态void main (String [] args)抛出IOException {   Socket套接字=新的套接字(127.0.0.1,6666);   线程读=新线程(新ClientReadServer(插座));   线程发送=新线程(新ClientSendServer(插座));   read.start ();   send.start ();   }   }

Java SE实现多人聊天室功能