저는 멀티 스레드 분산 네트워킹 알고리즘을 작성하고 있습니다._socketobjects를 매개 변수로 전달
새 연결을 수신하는 스레드가 하나 있습니다. 새로운 연결이 설정 될 때마다 별도의 스레드가 해당 연결의 메시지를 수신하기 위해 시작됩니다.
내 문제는 내가 열어 놓은 소켓이 연결 수신기 내부에서 양방향으로 완벽하게 작동한다는 것입니다. 해당 연결에 대한 소켓 객체를 메시지 수신기에 전달한 후 소켓에서 데이터를 읽을 수는 있지만 데이터를 보내면 원격 호스트에 도달하지 않습니다.
def connection_listener(port, start_e, terminate_e):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(1)
s.bind(('', port))
s.listen(1)
while (not start_e.isSet()):
try:
conn, addr = s.accept()
msg_in = conn.recv(1024).split(":")
if (msg_in[1]=="hello"):
# If addr sends us a 'id:hello', we reply with a 'my_id:welcome'
conn.send(str(my_id)+":welcome")
t = Thread(target=message_listener, args=(conn, addr[0], terminate_e,))
t.start()
except:
pass # timeout
def message_listener(conn, address, terminate_e):
while (not terminate_e.isSet()):
try:
msg_in = conn.recv(1024)
# Here I can receive everything that I send from the other end of conn,
# but conn.send("any data") doesn't reach the remote host
내가 뭘하려는 것은 CONN를 사용하여 메시지 수신기 스레드의 승인과 같은 메시지를 보낼 수 있습니다 :
여기 내 코드에서 필수 싹둑입니다. 어떻게 든 가능합니까 아니면 내가 생각하고 잘못하고 있습니까?