介绍
本篇文章给大家分享的是有关怎么在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中使用套接字实现一个多人聊天室