Python TCP Relay / Proxy Server锁定

时间:2015-04-23 02:04:20

标签: python sockets tcp proxy

我有一个非常简单的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'

谢谢!

1 个答案:

答案 0 :(得分:0)

其中一个网卡出现故障。我交换了网卡,它工作正常。不知道为什么它以这种方式出现,但至少我找到了解决方案。