java如何实现网络聊天室

avatar
作者
筋斗云
阅读量:0

在Java中实现网络聊天室,你可以使用套接字编程(Socket Programming)

  1. 创建服务器端:
import java.io.*; import java.net.*;  public class ChatServer {     public static void main(String[] args) throws IOException {         int port = 12345;         ServerSocket serverSocket = new ServerSocket(port);         System.out.println("Server is listening on port " + port);          while (true) {             Socket socket = serverSocket.accept();             System.out.println("New client connected");              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);              String message;             while ((message = in.readLine()) != null) {                 System.out.println("Received: " + message);                 broadcastMessage(out, message);             }              socket.close();             System.out.println("Client disconnected");         }     }      private static void broadcastMessage(PrintWriter out, String message) {         for (Socket socket : clients) {             if (socket != null && !socket.isClosed()) {                 out.println(message);             }         }     }      private static List<Socket> clients = new ArrayList<>(); } 
  1. 创建客户端:
import java.io.*; import java.net.*;  public class ChatClient {     public static void main(String[] args) throws IOException {         String serverAddress = "localhost";         int port = 12345;          Socket socket = new Socket(serverAddress, port);         System.out.println("Connected to server");          BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));         PrintWriter out = new PrintWriter(socket.getOutputStream(), true);          BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));         String userInput;          while (true) {             System.out.println("Enter your message: ");             userInput = stdIn.readLine();             if (userInput != null && !userInput.isEmpty()) {                 out.println(userInput);                 broadcastMessage(in, userInput + " (" + socket.getInetAddress() + ")");             }         }     }      private static void broadcastMessage(BufferedReader in, String message) throws IOException {         for (Socket socket : clients) {             if (socket != null && !socket.isClosed()) {                 PrintWriter out = new PrintWriter(socket.getOutputStream(), true);                 out.println(message);             }         }     } } 

这个示例中,服务器端监听12345端口,当客户端连接时,服务器将接收到的消息广播给所有连接的客户端。客户端可以发送消息给服务器,然后服务器将消息广播给其他客户端。

请注意,这个示例仅用于演示目的,实际应用中可能需要考虑更多的功能和优化,例如多个频道、用户身份验证等。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!