java - 在java中使用JButton向客户端发送消息

标签 java swing client server

我有一个 Java 程序,每当新客户端连接到我的服务器程序时,就会生成运行时 JButton。仅当单击为特定客户端分配的 JButton 时,我才需要向特定客户端发送消息。

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

                    socket = listener.accept();
                    try {

                           //  System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
                            clientIP= socket.getLocalAddress().getHostName();
                            buttons.add(new JButton(clientIP));
                           displayButton(buttons.get(clientNumber),clientNumber);
                            clientNumber++;

                 } 
                    finally {
                        socket.close();
                    }
                }
            }
            finally {
                listener.close();
            }
        }
        catch (IOException ex) {
            Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

我尝试过类似的事情。

public void actionPerformed( ActionEvent e ) throws IOException{
    if ( e.getSource() == buttons.get(1) )
    {
        String thisIP = buttons.get(1).getText();
        PrintWriter out =
                        new PrintWriter(socket.getOutputStream(), true);

                         out.println("hey");
                         JOptionPane.showMessageDialog(null,"gfb");
    }
  }

这些是全局宣布的:

String clientIP = "";
    int clientNumber = 0;
    ArrayList<JButton> buttons = new ArrayList<JButton>();
    Socket socket;

最佳答案

这是修改为使用 TreeMap(排序的 HashMap)而不是 ArrayList 的代码,其中每个按钮都映射到套接字对象,请注意套接字不再是全局的。如果有不清楚的地方请告诉我。

  int clientNumber = 0;
  TreeMap buttonsMap = new TreeMap();
  buttonListener blistener = new buttonListener();
  void connect_clients()
    {
        try {
            ServerSocket listener = new ServerSocket(7700);
            jButton2.setText("Server Running!");
            jButton2.setEnabled(false);
            try {
                while (true) {

                    Socket socket = listener.accept();
                    try {

                         //  System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
                         String clientIP= socket.getLocalAddress().getHostName();
                         JButton button = new JButton(clientIP);
                        button.addActionListener(blistner);
                         buttonsMap.put(button, socket);
                         displayButton(button,clientNumber);
                         clientNumber++;

                 } 
                 catch(Exception e)
                 {
                 }
               }
            }
            finally {
                listener.close();
            }
        }
        catch (IOException ex) {
            Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



private class buttonListener implements ActionListener
  {  
    public void actionPerformed( ActionEvent e ) throws IOException{
        if ( JButton button= e.getSource())
        {
            Socket socket = (Socket)buttonsMap.get(button);
            PrintWriter out =
                            new PrintWriter(socket.getOutputStream(), true);

                             out.println("hey");
                             JOptionPane.showMessageDialog(null,"gfb");
        }
      }
    } 

关于java - 在java中使用JButton向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735662/

相关文章:

c++ - 无法通过 Poco 验证服务器证书

Laravel Passport 以编程方式创建客户端

apache - 特定子域上的 TLS 相互身份验证

java - Android ContextWrapper fileList() 看不到我的文件

java - 我怎样才能让我的应用程序运行并解决这个错误

java - 如何将 .CSV 文件导入 Drools

Window 上的 Java Swing pack() 未最大化它,如何避免这种情况?

java - 我可以使用运行时参数来修复 Java 中的错误 API 调用吗?

java - 需要在 JFrame 中使用 JOptionPane.ERROR_MESSAGE 类型的 JDialog

java - Ubuntu : javac package gnu. io不存在