怎么在Java中使用套接字实现一个多人聊天室

  介绍

本篇文章给大家分享的是有关怎么在Java中使用套接字实现一个多人聊天室,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<>强流程

<李>

首先建立一个服务器端,构建考察并绑定端口

<李>

创建座客户端,连接到指定ip以及其端口

<李>

然后使用接受阻塞接收套接字发出的连接请求

<李>

获取连接后的套接字客户端的输入流和输出流

<李>

根据输入流和输出流进行两者数据的通信

值得一提的是:该套接字是同步阻塞的,因此在套接字客户端需要进行创建一个线程,来分别进行向服务器输出,和接收服务器传输的数据。要解决同步阻塞这个问题可以去了Java NIO解。

插座客户端代码如下:

import  java.io.BufferedReader;   import  java.io.IOException;   import  java.io.InputStreamReader;   import  java.io.PrintWriter;   import  java.net.Socket;   ,   public  class 客户{   ,   ,public  static  void  main (String [], args), throws  IOException  {   ,//创建连接指定Ip和端口的插座   ,Socket  Socket =, new 插座(“127.0.0.1", 5200);   ,//获取系统标准输入流   ,BufferedReader  reader =, new  BufferedReader (new  InputStreamReader(系统));   ,PrintWriter  out =, new  PrintWriter (socket.getOutputStream ());=,拷贝,BufferedReader  new  BufferedReader (new  InputStreamReader (socket.getInputStream ()));   ,//创建一个线程用于读取服务器的信息   ,new 线程(new  Runnable (), {   @Override才能   public 才能;void 运行(),{   try {才能   ,,while  (true) {   ,,System.out.println (in.readLine ());   ,,}   ,,},catch  (IOException  e), {   ,,e.printStackTrace ();   ,,}   ,,}   ,}).start ();   ,//写信息给客户端   ,String  line =, reader.readLine ();   ,while (!“;以何种;.equalsIgnoreCase(线)){//将才能从键盘获取的信息给到服务器   out.println才能(线);   out.flush才能();//才能显示输入的信息   时间=line 才能;reader.readLine ();   ,}   ,out.close ();   ,in.close ();   ,socket.close ();   ,   ,}   }

由于要接收多个客户端的请求,因此服务端需要多个线程进行分别来接收客户端的请求。

插座服务端代码如下:

import  java.io.IOException;   import  java.net.ServerSocket;   import  java.net.Socket;   import 并不知道;   import  java.util.Vector;   ,   public  class  Servers  {   ,//将接收到的套接字变成一个集合   ,protected  static  List

服务器线程代码如下:

import  java.io.BufferedReader;   import  java.io.IOException;   import  java.io.InputStreamReader;   import  java.io.PrintWriter;   import  java.net.Socket;   ,/* *   ,*服务器线程,主要来处理多个客户端的请求   ,*/public  class  ServerThead  extends  Servers  implements  Runnable {   ,   ,Socket 插座;   ,String  socketName;   ,   ,public  ServerThead (Socket 插座){=,this.socket 插座;   ,}   ,@Override   ,public  void  run (), {   ,try  {   BufferedReader 才能;reader =, new  BufferedReader (new  InputStreamReader (socket.getInputStream ()));//才能设置该客户端的端点地址   时间=socketName 才能;socket.getRemoteSocketAddress () .toString ();   System.out.println才能(“Client@" + socketName +“已加入聊天“);   打印才能(“Client@" + socketName +“已加入聊天“);   boolean 才能;flag =,真的;   while 才能;(国旗)   {才能//阻才能塞等,待该客户端的输出流   String 才能;line =, reader.readLine ();//若才能客户端退出,则退出连接。   if 才能;(line ==, null) {   ,,flag =,假;   ,才能继续;   ,,}   String 才能;msg =,“Client@" + socketName +“:“+线;   System.out.println才能(味精);//向才能在线客户端输出信息   打印才能(味精);   ,,}   ,   closeConnect才能();   ,}catch  (IOException  e), {   try {才能   closeConnect才能();   ,,},catch  (IOException  e1), {   e1.printStackTrace才能();   ,,}   ,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Java中使用套接字实现一个多人聊天室