gpt4 book ai didi

java - 只有最后连接的客户端才能收到消息

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:25 25 4
gpt4 key购买 nike

我有一个服务器客户端程序,我想使用JLabel(MouseClick)与所有连接的客户端进行通信。但该消息仅传递给最后一个连接的客户端。我无法识别问题所在。这是我的代码

//服务器

void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton1.setText("Server Running!");
jButton1.setEnabled(false);
try {
while (true) {

socket = listener.accept();
try {
clientIP = socket.getLocalAddress().getHostName();
}
catch(Exception e){}
}
}
catch(Exception e){}

}
catch(IOException ex)
{
}
}
}

private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {
PrintWriter out;
try {
out = new PrintWriter(socket.getOutputStream(), true);
out.println("pc2");
} catch (IOException ex) {
Logger.getLogger(third_frame.class.getName()).log(Level.SEVERE, null, ex);
}
}

//客户端

void connect_server()
{
try {
while(true)
{
// TODO code application logic here
String serverAddress = JOptionPane.showInputDialog(
"Enter IP Address of a machine that is\n" +
"running the date service on port 9090:");
s = new Socket(serverAddress, 7700);


BufferedReader input =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String answer = input.readLine();

System.out.println(answer);
answer = null;
}
}
catch (IOException ex) {
Logger.getLogger(client_form.class.getName()).log(Level.SEVERE, null, ex);
}
}

注意:Socket 在服务器和客户端中全局声明。

最佳答案

每次服务器接受连接时,它都会创建一个代表该连接的新套接字。由于每次建立新连接时都会覆盖套接字引用,因此您仅保留对最后一个连接的引用。

private List<Socket> socketList;
...

ServerSocket listener = new ServerSocket(7700);
socketList = new ArrayList<>();
...

socketList.add(listener.accept());
...

for (Socket socket: socketList) {
out = new PrintWriter(socket.getOutputStream(), true);
out.println("pc2");
...
}

关于java - 只有最后连接的客户端才能收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com