2012-03-20 9 views
1

나는 별도의 서비스 쓰루 UDP와 통신하는 멀티 스레드 파이썬 애플리케이션을 가지고있다.파이썬 UDP 클라이언트 임시 수신 포트

각 스레드는 비슷하지만 어떤 시점에서는 별도 서비스의 응답이 필요합니다.

사실상 각 스레드마다 새로운 클라이언트 소켓을 만들고 통신을 시작합니다. 문제는 서버 쪽에서 각 UDP 패킷이 동일한 수신 포트에서 오는 것으로 보이므로 클라이언트 쪽에서 누가 메시지를 수신하는지 문제가 발생합니다.

동일한 프로그램의 다른 스레드에서 인스턴스마다 다른 임시 수신 포트를 사용하도록 소켓을 적용하려면 어떻게해야합니까?

감사합니다.

+0

로컬 LAN 또는 일부 NAT 메커니즘을 사용하고 있습니까? –

+0

로컬 LAN에 있습니다. 네트워크 인터페이스가 'bridged'로 설정된 우분투 VM웨어 시스템입니다. – sanyi

답변

2

connect() 각 UDP 소켓을 대상으로 지정할 수 있습니다. 그런 식으로 임시 포트는 각 스레드마다 고정됩니다.

+0

감사! 임시 포트를 인스턴스간에 무작위로 랜덤 화하지 않는 것으로 보입니다. 테스트 케이스를 줄이고 다시 내 잘못이 아닌지 확인하기 위해 잠시 시간을내어주십시오. – sanyi

+0

Ok는 윈도우즈에서 작동하지만, 윈도우즈에서도 connectionless (sendto와 함께)를 사용할 수 있지만 실제로는 연결을 요청할 수 있다는 것을 아는 것은 흥미 롭습니다. (UDP가 비 연결이기 때문에 여기서 파이썬을하고 있습니다. 이제는 우분투 기기에서 어떤 일이 일어나는지 모르지만 나중에 확인하겠습니다. – sanyi

+1

기본적으로'connect()'- UDP 소켓은 하나의 목적지 (필터의 종류)와 통신하는 것을 제한합니다 (그리고 스피드 업 커널은 연결된 UDP 소켓을위한 어떤 로직을 우회합니다). –