本文实例为大家分享了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实现多人聊天室功能