서버에 여러 메시지를 보내야하는 TCP 클라이언트가 많이 있습니다. 서버 측에서는 다음과 같이 썼습니다.
def listenConnections():
thread_recieve = Thread(target=recieveInstruction)
while(1):
lstn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# port = int(sys.argv[1]) # server port number
lstn.bind(('IP', PORT))
lstn.listen(5)
global clnt
(clnt,ap) = lstn.accept()
thread_recieve.start()
def recieveInstruction():
while (1):
try:
message = clnt.recv(1024)
print message
except:
pass
따라서 한 클라이언트가 연결할 때마다 1 개의 메시지를 보낼 수 있고 서버는이를 읽습니다. 그러나 다른 클라이언트가 연결되거나 동일한 클라이언트가 다른 메시지를 보내려고하면 작동하지 않습니다. 클라이언트 측은 꽤 견고합니다. 여러 번 생성 된 연결을 사용하여 메시지를 수신 할 수있는 방법을 알 수없는 것 같습니다. 그래서 멀티 스레드를 시도했지만 작동하지 않았습니다. Btw, 스레드에서도 listenConnections를 실행합니다. 나는한다:
def main():
t = Thread(target=listenConnections)
t.start()
main()
우선 lstn.bind (( 'IP', PORT)) 및 lstn.listen (5) 메서드는 루프 외부에서 한 번만 호출해야합니다. 루프 내에서 (clnt, ap) = lstn.accept () 만 호출해야합니다 .
게다가, 루프 외부에서 한 번만 클라이언트 메시지를 수신하는 새 스레드를 인스턴스화하므로 thread_receive.start () 한 번만 호출 할 수 있습니다 . 두 번째로 시도하면 오류가 발생할 수 있습니다. ,이 스레드는 이미 시작될 것입니다. 각 클라이언트 연결에 대한 새 스레드를 만들어야합니다. 이는 thread_receive.start () 를 호출하기 전에 매번 thread_receive = Thread (target = receiveInstruction)을 호출하는 것을 의미 합니다.
또한 클라이언트와 연결에 대한 일종의 내부 제어를 유지하여 어떤 메시지를 어떤 클라이언트로부터 받았거나 어떤 클라이언트로 보내야하는지 관리 할 수 있도록하는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다