[英]Only last connected client receives message
我有一個服務器客戶端程序,我想在其中使用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");
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.