所以我有一个连接到外部网址的套接字,当它收到某个消息时,它应该断开连接。我尝试拨打socket.close()
,但socket.isConnected()
仍然是真的。没有运气寻找答案
答案 0 :(得分:3)
isConnected()
仅告诉您是否成功连接到套接字。 isClosed()
会告诉您是否致电close()
。
答案 1 :(得分:0)
“当您使用Socket()时,您似乎忽略了它, Socket.isConnected()告诉你Socket.connect()是否已经存在 是否打电话。类似地,对于isClosed()和close()。
对这些方法的混淆是由于混淆了状态 套接字,由应用程序控制,具有状态 总体连接,在协议的控制下。 isConnected()和isClosed()告诉你对套接字做了什么。 除了读取和写入之外,没有用于确定状态的API 连接。“
Oracle documantion<在这里,我们很好地解释了,当您致电.close()
时,连接已关闭,您可以isClosed()
进行检查。
.close():
关闭此套接字。
此套接字上的I / O操作中当前阻塞的任何线程都将 抛出一个SocketException。
套接字关闭后,无法继续使用 网络使用(即不能重新连接或反弹)。一个新的插座 需要创建。
答案 2 :(得分:0)
isConnected()
和isClosed()
告诉您套接字(在您身边)的当前状态。
isConnected()
告诉您 您 是否已连接此套接字,isClosed()
告诉您是否 you >关闭此插座。除非您拥有,否则它将返回false。
答案 3 :(得分:0)
是的,没错。看起来 socket.close()
和 socket.isConnected()
肯定是相互独立的。我希望方法命名不要那么混乱。
来自官方Android SDK:
<块引用>public boolean isConnected()
返回套接字的连接状态。
注意:关闭套接字不会清除其连接状态,这意味着 此方法将为关闭的套接字返回 true
附言更直观的应该是wasConnected()
?
答案 4 :(得分:-1)
答案 5 :(得分:-1)
http://developer.android.com/reference/java/net/Socket.html#close()
对返回的数据执行校验和,确保获得正确的值。如果是这样,你打电话给关闭并尝试抓住一切,那应该没问题。
您可以在调试器中观看并确保没有任何泄漏。