簡體   English   中英

只有最后連接的客戶端收到消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM