temz 2023-02-25 17:13 采纳率: 100%
浏览 52
已结题

Java socket

在jframe中使用JTextField输入ip地址,

img

点击连接按钮通过点击事件 声明socket并与server建立连接

 btnconnect.addActionListener(new ActionListener(){   
            public void actionPerformed(ActionEvent e){
                SocketConnect sc= new SocketConnect(txtip.getText());
                
            }
        });
public class SocketConnect implements Runnable{

    Socket socket;
    String ip;
    SocketConnect(String ip){
        this.ip=ip;
    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            socket = new Socket(ip,502);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }

}

建立连接后,点击开始监控按钮开始向server端发送数据
问题1:socket是在连接按钮的点击事件里面声明的无法传到开始监控按钮的点击事件里面,希望达到的效果就是点击连接按钮就建立一个新的socket,所以不能使用静态变量,如何将连接按钮里面的socket对象传给开始监控按钮的点击事件里面的线程。
问题2:另外如何判断是否已经与该ip的server建立了连接,如果已经建立了连接就system.out.print一句话,如果没建立连接再建立socket,麻烦哪个牛人给解决下

  • 写回答

6条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-25 17:20
    关注

    基于Monster 组和GPT的调写:
    问题1:可以将socket对象作为参数传递给开始监控按钮的点击事件里面的线程。例如,可以在SocketConnect类中添加一个方法,该方法接受一个socket参数,并将其设置为该类的实例变量。然后,可以在连接按钮的点击事件中创建SocketConnect对象,并将其传递给开始监控按钮的点击事件。

    例如:

    public class SocketConnect implements Runnable{
    
        private Socket socket;
        private String ip;
        
        public void setSocket(Socket socket) {
            this.socket = socket;
        }
    
        SocketConnect(String ip){
            this.ip=ip;
        }
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                if (socket == null || socket.isClosed()) {
                    socket = new Socket(ip,502);
                }
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    

    然后,在连接按钮的点击事件中,您可以创建一个新的SocketConnect对象,并将其传递给开始监控按钮的点击事件。例如:

    Socket socket = null;
    btnconnect.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent e){
            if (socket == null || socket.isClosed()) {
                socket = new Socket();
                SocketConnect sc= new SocketConnect(txtip.getText());
                sc.setSocket(socket);
                Thread thread = new Thread(sc);
                thread.start();
            }
        }
    });
    
    btnstart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (socket != null && socket.isConnected()) {
                // 在此处发送数据
            }
        }
    });
    
    
    

    问题2:可以在SocketConnect类中添加一个方法来检查socket是否已经连接到服务器。例如:

    public boolean isConnected() {
        return socket != null && socket.isConnected() && !socket.isClosed();
    }
    
    
    
    ``
    然后,在连接按钮的点击事件和开始监控按钮的点击事件中都可以调用该方法来检查socket是否已连接到服务器。例如:
    

    btnconnect.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    if (socket == null || !sc.isConnected()) {
    socket = new Socket();
    SocketConnect sc= new SocketConnect(txtip.getText());
    sc.setSocket(socket);
    Thread thread = new Thread(sc);
    thread.start();
    } else {
    System.out.println("已连接到服务器。");
    }
    }
    });

    btnstart.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    if (socket != null && sc.isConnected()) {
    // 在此处发送数据
    } else {
    System.out.println("未连接到服务器。");
    }
    }
    });

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月26日
  • 已采纳回答 2月25日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”