OS:CentOS的
的Python 2.4和2.7Python的TCP和UDP代理/中繼
我試圖建立TCP和UDP流量,我的應用程序的繼電器或代理。
我的設置是app1通過不斷髮送UDP數據包來驗證app2處於聯機狀態。
一旦app1驗證app2在線,它將通過TCP協議發送app2數據包。
這是到目前爲止我的代碼:
#-------------------------------------
#SOCK_DGRAM --UDP
u_localPort = 20006
u_remotePort = 20006
u_remoteHost = "x.x.x.x"
u_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
u_sock.bind(('', u_localPort))
u_knownClient = None
u_knownServer = (u_remoteHost, u_remotePort)
#-------------------------------------
#-------------------------------------
#SOCK_STREAM --TCP
t_localPort = 10006
t_remotePort = 10006
t_remoteHost = "x.x.x.x"
#client
c_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c_tcp.connect((t_remoteHost, t_remotePort))
#server
s_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_tcp.bind(('', u_localPort))
s_tcp.listen(1)
conn, addr = s_tcp.accept()
#-------------------------------------
while True:
u_data, u_addr = u_sock.recvfrom(4096)
if u_knownClient is None:
u_knownClient = u_addr
if u_addr == u_knownClient:
u_sock.sendto(u_data, u_knownServer)
else:
u_sock.sendto(u_data, u_knownClient)
data = conn.recv(1024)
if not data: break
print "received data:", data
c_tcp.send(data) # echo
這段代碼的UDP數據似乎是正確的中繼。但TCP不是。 什麼可能是錯的?
爲什麼在通過TCP發送之前使用UDP進行探測?爲什麼不從一開始就使用TCP,並假定沒有連接意味着不可用? – 2013-04-21 05:54:25