繁体   English   中英

Java套接字未关闭

[英]Java socket not closing

好吧...我是java的新手,这是我的第一个应用程序。 我正在整理一个Java套接字应用程序。 连接后,它将按钮标签从“连接”更改为“断开”。 如果按钮标签=断开连接,则为socket.close。 不知道为什么它没有关闭。 是因为它是私人的吗? 我知道可能有更好的方法来确定套接字是否已打开,等等。但是我确实是第一位,试图了解以下内容为何不起作用。 任何帮助,将不胜感激。 谢谢!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    Socket s = new Socket();
    String host = jTextField1.getText();
    double d = Double.parseDouble(jTextField2.getText());
    int port = (int) d;
    if (jLabel4.getText() == "Disconnected") {
        try {
            s.connect(new InetSocketAddress(host, port), 60);
            jLabel4.setText("Connected");
            jButton1.setText("Disconnect");
        } catch (IOException ex) {
            Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
        }
    } else {
        try {
            s.close();
            jLabel4.setText("Disconnected");
            jButton1.setText("Connect");
        } catch (IOException ex) {
            Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

我不明白您的程序应该如何工作。 套接字s对于操作处理程序而言是本地的,因此,您可以连接新分配的套接字,或者关闭一个从未使用过的套接字。 我认为您应该重新访问程序并将套接字保留为某些对象的字段,以便可以查询其状态并根据程序的当前状态和来自GUI的用户请求进行相应操作。

另外,请注意,应该将字符串与Object.equals()进行比较,而不是与==进行比较,因为==检查对象身份,并且对运行时检查不可靠(即使有时当参数是编译时常量或内在字符串时也可以使用)。

另外,您的程序应保留一个内部布尔标志,而不是检查标签的值(例如,如果这是一个真实的应用程序,并且您添加了翻译,该怎么办?)

可能是因为String比较。
尝试

if(jLabel4.getText().equals("Disconnected"))

如果这不能解决您的问题,请保留一个指示是否连接的boolean ,而不是从标签中读取字符串。

boolean connected;
\\ something
if(connected)
\\ do this
else
\\do that

编辑:此外,您应该使套接字超出类范围。 它必须是班级成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM