是不是阻塞我也不太清楚,我先描述下问题吧,对于socket编程也不太熟悉,只是参考资料自己试了下。
下面这代码当作服务器端DSC的代码,一直在等待另一客户端DTU发送数据。
HOST = '127.0.0.1'
PORT = 8089
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(5)
while True:
print "wating for connection..."
connection, address = sock.accept()
print "connected from", address
while True:
data = connection.recv(1024)
if not len(data):
continue
代码如上,执行的话是没有问题的,当客户端DTU一直send数据的时候。如果现在出现意外,客户端DTU断电或者其它情况数据中断发送一会,上面的代码就出错了,会一直不动。我想要的结果应该是DSC,就是上面的代码从connection, address = sock.accept() 重新执行一下,待DTU再重新发数据的时候我这边可以正常接收,现在如果我不重新执行代码的它就不会重新接收,等同于“卡死”在那儿。
不知道大家有没有听明白。上面的代码是DSC端。有一个DTU端一直在向DSC发送数据。DTU端是一个无线发送装置,不用关心,只知道它会不停的向DSC发送数据。 DTU随时会断电,所以要保证DSC能很好的处理各种情况,请教大家如何解决?
DTU每次发送数据时如果断电,connection, address = sock.accept() 接收到的address会每次都不一样的,我测试过。
下面这代码当作服务器端DSC的代码,一直在等待另一客户端DTU发送数据。
HOST = '127.0.0.1'
PORT = 8089
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(5)
while True:
print "wating for connection..."
connection, address = sock.accept()
print "connected from", address
while True:
data = connection.recv(1024)
if not len(data):
continue
代码如上,执行的话是没有问题的,当客户端DTU一直send数据的时候。如果现在出现意外,客户端DTU断电或者其它情况数据中断发送一会,上面的代码就出错了,会一直不动。我想要的结果应该是DSC,就是上面的代码从connection, address = sock.accept() 重新执行一下,待DTU再重新发数据的时候我这边可以正常接收,现在如果我不重新执行代码的它就不会重新接收,等同于“卡死”在那儿。
不知道大家有没有听明白。上面的代码是DSC端。有一个DTU端一直在向DSC发送数据。DTU端是一个无线发送装置,不用关心,只知道它会不停的向DSC发送数据。 DTU随时会断电,所以要保证DSC能很好的处理各种情况,请教大家如何解决?
DTU每次发送数据时如果断电,connection, address = sock.accept() 接收到的address会每次都不一样的,我测试过。