这是一个创建于 3587 天前的主题,其中的信息可能已经有所发展或是发生改变。
是不是阻塞我也不太清楚,我先描述下问题吧,对于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会每次都不一样的,我测试过。
5 条回复 • 2014-12-15 09:10:14 +08:00
|
|
1
mengskysama 2014-12-11 00:10:24 +08:00
if len(data) == 0: break
|
|
|
3
allenforrest 2014-12-11 15:35:57 +08:00
把 accept 的监听代码放在一个线程里,接收到一个成功连接就添加到一个 socket 队列里,主线程循环 select(或 epoll)所有 socket 队列,处理消息收发。
|
|
|
4
julyclyde 2014-12-14 22:16:40 +08:00
thread mixin class
|
|
|
5
mengzhuo 2014-12-15 09:10:14 +08:00
一楼正解 remote 自己断开时回发送FIN数据包,然后长度为0
|