2015-10-01 82 views
0

我有这个功能来检测套接字连接的状态(连接或断开)检测:当插座被通过sock.recv断开,socket.timeout

def connection_status(self): 

     try: 

      sock.settimeout(2) 
      connection_status = sock.recv(32) 
      print("Status: Connected") 
      self.label_connection_status['text'] = 'Status: Connected' 
      self.label_connection_status['fg'] = 'green' 

     except socket.timeout: 

      connection_status = "" 
      print("Status: Disconnected") 
      self.label_connection_status['text'] = 'Status: Disconnected' 
      self.label_connection_status['fg'] = 'red' 

     self.master.after(3000, self.connection_status) 

但有一个问题吧。当我连接到服务器(在我的情况下,三星电视,其遥控应用程序),它几次垃圾邮件“状态:连接”,但几秒钟后,它变成“状态:断开连接”(但仍然连接...)如果我将一些数据发送到服务器(三星电视),它会再次变为“已连接”,几秒后它又会变为“已断开连接”。和我停止服务器(三星电视),它只输出“状态:连接”!

+0

您的电视每隔3秒钟或更少时间不断流32个字节吗? –

+0

@BryanOakley我不清楚知道,但如果我设置更少的字节它输出“状态:连接”更高的时间,所以..是啊,问题可能在电视上,但如何适应电视代码? – PepinCZ

回答

1

为什么你将recv()与连接/断开混淆?被超时中断的recv()仅仅意味着在指定的时间段内没有收到数据,但绝不表示断开!相反,正常的断开不会在recv()上表现为超时,而是从recv()返回具有approriate状态的指示断开事件。

+0

那么如何检查连接是否死亡? – PepinCZ

+0

@PepinCZ,这取决于你是什么意思的'死连接'。 – SergeyA

+0

这很容易,如果电视关闭或从WIFI网络断开,或PC断开连接。 – PepinCZ