我有一个非常简单的Python代理服务器,我已经设置好了。它的目的是获取TCP流(视频)并将该TCP流转发给多个客户端(当前只测试一个客户端启动)。一切顺利,直到我尝试转发(o.send(data))数据,然后它将接收/发送一些数据包,冻结然后大约一两分钟后收到/发送一些更多数据包并再次冻结。
如果我只是将传入的数据加载到变量中,它根本不会减慢速度。如果我将传入的数据加载到数据变量中,但是向客户端发送随机数据块而不是接收到的数据,它也不会冻结。我觉得可能有竞争条件或类似的东西,但.recv()不应该阻止,所以我不知道死锁将来自何处。一旦数据被recv移动,它应该能够正确发送吗?然后无限期冲洗/重复。我可以用top -bn1检查CPU利用率,而python脚本似乎根本没有使用任何cpu。
死锁发生在.recv()和.send()之间。
如果我输入调试打印件,它将打印"收到数据!" .....暂停......"数据发送!" "收到的数据!" ....
import socket
# Listen for gstreamer TCP stream.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.1.1", 911))
s.listen(5)
# Connect to the video player
o = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
o.connect(("192.168.2.2",910))
clientsocket, address = s.accept()
while 1:
# Receive the video data.
data = clientsocket.recv(4096)
# Forward it to the video player
o.send(data)
print 'o'
谢谢!
答案 0 :(得分:0)
其中一个网卡出现故障。我交换了网卡,它工作正常。不知道为什么它以这种方式出现,但至少我找到了解决方案。