OS : CentOS는
파이썬 : 2.4 및 2.7파이썬 TCP 및 UDP 프록시/릴레이
내 응용 프로그램을 모두 TCP 및 UDP 트래픽을위한 릴레이 또는 프록시 구축을 위해 노력하고있다.
내 설정은 app1이 지속적으로 UDP 패킷을 보내서 app2가 온라인인지 확인합니다.
app1이 app2가 온라인 상태인지 확인하면 TCP 프로토콜을 통해 app2 데이터 패킷을 보냅니다.
이 지금까지 내 코드는 다음 UDP 데이터가 제대로 중계 될 것으로 보인다 코드와
#-------------------------------------
#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
. 그러나 TCP는 그렇지 않습니다. 무엇이 잘못 될 수 있습니까?
왜 TCP를 통해 전송하기 전에 UDP로 프로브합니까? 왜 처음부터 TCP를 사용하지 않고 연결이 없다고 가정하지 않을까요? –