在Android中如何断开套接字?

时间:2013-08-23 15:31:14

标签: android sockets disconnect

所以我有一个连接到外部网址的套接字,当它收到某个消息时,它应该断开连接。我尝试拨打socket.close(),但socket.isConnected()仍然是真的。没有运气寻找答案

6 个答案:

答案 0 :(得分:3)

isConnected()仅告诉您是否成功连接到套接字。 isClosed()会告诉您是否致电close()

看看这家伙回复https://stackoverflow.com/a/3701249/2453771

答案 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)

尝试

socket.isClosed() 

返回一个boolian,无论此套接字是否已关闭。 参考 Sockets

答案 5 :(得分:-1)

http://developer.android.com/reference/java/net/Socket.html#close()

对返回的数据执行校验和,确保获得正确的值。如果是这样,你打电话给关闭并尝试抓住一切,那应该没问题。

您可以在调试器中观看并确保没有任何泄漏。