在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么用java实现一个简易的聊天室

113次阅读
没有评论

共计 3211 个字符,预计需要花费 9 分钟才能阅读完成。

要实现一个简易的聊天室,可以使用 Java 的 Socket 编程实现。下面是一个简单的实现示例:

服务器端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ChatServer {private ServerSocket serverSocket;
    private List<ClientHandler> clients = new ArrayList<>();

    public static void main(String[] args) {ChatServer server = new ChatServer();
        server.start(8888);
    }

    public void start(int port) {try {serverSocket = new ServerSocket(port);
            System.out.println(" 服务器已启动,监听端口:" + port);

            while (true) {Socket clientSocket = serverSocket.accept();
                System.out.println(" 客户端已连接:" + clientSocket.getRemoteSocketAddress());

                // 创建一个新的客户端处理器
                ClientHandler clientHandler = new ClientHandler(clientSocket);
                clients.add(clientHandler);
                clientHandler.start();}
        } catch (IOException e) {e.printStackTrace();
        }
    }

    public synchronized void broadcast(String message, ClientHandler excludeClient) {for (ClientHandler client : clients) {if (client != excludeClient) {client.sendMessage(message);
            }
        }
    }

    public synchronized void removeClient(ClientHandler client) {clients.remove(client);
    }

    private class ClientHandler extends Thread {private Socket clientSocket;
        private InputStream inputStream;
        private OutputStream outputStream;

        public ClientHandler(Socket clientSocket) {this.clientSocket = clientSocket;
        }

        @Override
        public void run() {try {inputStream = clientSocket.getInputStream();
                outputStream = clientSocket.getOutputStream();

                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {String message = new String(buffer, 0, bytesRead);
                    System.out.println(" 收到消息:" + message);

                    // 广播消息给其他客户端
                    broadcast(message, this);
                }
            } catch (IOException e) {e.printStackTrace();
            } finally {try {clientSocket.close();
                    removeClient(this);
                } catch (IOException e) {e.printStackTrace();
                }
            }
        }

        public void sendMessage(String message) {try {outputStream.write(message.getBytes());
                outputStream.flush();} catch (IOException e) {e.printStackTrace();
            }
        }
    }
}

客户端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class ChatClient {private Socket socket;
    private InputStream inputStream;
    private OutputStream outputStream;

    public static void main(String[] args) {ChatClient client = new ChatClient();
        client.connect("localhost", 8888);
    }

    public void connect(String serverAddress, int serverPort) {try {socket = new Socket(serverAddress, serverPort);
            System.out.println(" 已连接到服务器:" + serverAddress + ":" + serverPort);

            inputStream = socket.getInputStream();
            outputStream = socket.getOutputStream();

            // 接收和发送消息的线程
            Thread receiveThread = new Thread(this::receiveMessages);
            Thread sendThread = new Thread(this::sendMessages);

            receiveThread.start();
            sendThread.start();} catch (IOException e) {e.printStackTrace();
        }
    }

    public void receiveMessages() {try {byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {String message = new String(buffer, 0, bytesRead);
                System.out.println(message);
            }
        } catch (IOException e) {e.printStackTrace();
        }
    }

    public void sendMessages() {Scanner scanner = new Scanner(System.in);
        try {while (true) {String message = scanner.nextLine();
                outputStream.write(message.getBytes());
                outputStream.flush();}
        } catch (IOException e) {e.printStackTrace();
        }
    }
}

在命令行中,先运行服务器端的 ChatServer 类,再运行客户端的 ChatClient 类。客户端可以输入消息,然后服务器端会将消息广播给其他客户端。注意要将客户端的 connect 方法中的 serverAddress 改为服务器的 IP 地址。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-13发表,共计3211字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久99亚洲精品久久久久 | 国内自拍视频一区二区三区 | 亚洲免费一区 | 特黄特色大片免费视频大全 | 国产日韩欧美亚洲 | 亚洲av无码国产在丝袜线观看 | 精品一区二区三区高清免费不卡 | 特级毛片a级毛片免费观看网站 | 精品国产一区二区三区四区阿崩 | 亚洲国产精品一区二区九九 | 99热在线精品免费播放6 | 欧美乱妇高清无乱码免费 | 99精品久久久久久久 | 国产一级片在线播放 | 成人av鲁丝片一区二区免费 | 亚洲国产成人精品无码区花野真一 | 国产精品视频一区二区噜噜 | 一级做a爱片特黄在线观看yy | 99久热成人精品视频 | 国产精品五月色六月婷婷 | 欧美肥老太牲交大战 | 成年美女黄网站色大片免费软件看 | 空姐毛片 | 麻豆国内精品久久久久久 | 成 人 免费 黄 色 视频 | 黑人巨大精品欧美 | 夫妻免费无码v看片 | 精品久久久久久久中文字幕 | 亚洲欧美色综合大色 | 欧美性活一级视频 | 国产在线麻豆自在拍91精品 | 午夜资源站 | 亚洲精品乱码久久久久久蜜桃图片 | 天天干天天干天天干 | 亚洲成综合人影院在院播放 | 精品久久久中文字幕二区 | 欧美激情视频一区二区免费 | 国产丝袜在线播放 | 午夜综合网 | 亚洲国产精品无码久久一区二区 | 最近2019中文字幕一页二页 |