2010-12-06 5 views
1

파이썬으로 멀티 스레드 서버를 작성하려고합니다. callInThread (self.task)는 클라이언트가 서버로부터 sth를 요청할 때마다 task()를 실행할 새 스레드를 생성합니다. 클라이언트 (포트 53를 통해 모든) 요청 하나 하나를 보낼 때, 모든 작동하지만 동시에 여러 요청이있을 때, 그것은주소가 이미 멀티 스레드 서버와 함께 사용 중입니다.

File "", line 1, in bind socket.error: [Errno 98] Address already in use

거기에 내 스레드 문제 STH 말한다 하나만을 사용할 수 있습니다 한 번에 항구? 그렇다면 서버를 멀티 스레딩하고 어떻게해야합니까? 감사합니다.

+0

@pilu : 당신이 전혀 꼬아 서지 않은 것처럼 보입니다 ... 평행선으로 일을 처리 할 스레드가 필요하지 않습니다. 실제로는 모든 것을 피하는 것이 좋습니다. –

+0

무엇을 의미합니까? parrallel에서 물건을 실행하는 스레드가 필요하지 않니? – umm

+0

"sth"는 "something"을 의미합니까? –

답변

2

스레드가 필요하지 않습니다. 이것은 끔찍한 버그입니다. Twisted는 이미 recv을 호출하고 있습니다. 그 결과는 datagramReceived으로 전달됩니다. 직접 다시 부르지 마십시오. 스레드가 필요 없습니다.

그러나 문제는 사용자의 문제와 관련이 없습니다. 53은 기본 DNS 포트입니다. 문제는 다른 서버, 아마도 DNS 서버가 해당 컴퓨터에서 이미 실행되고 있다는 것입니다. 53을 다른 값으로 변경해보십시오.

하지만 실제로는 잘 모르겠습니다. 앞으로는 전체 추적을 붙여주세요. 트레이스 백 라인은 붙여 넣은 예제에서 나온 것이 아니기 때문에 'class'문을 제외하고는 아무 것도 없습니다. 또한이 코드는 들여 쓰기가 잘못되어 SyntaxError이 발생하므로 분명히 실행중인 코드와 정확하게 일치하지 않습니다.

실제로 DNS로 뭔가를하고 있다고 가정하면 Twisted는 자체 DNS 서버를 가지고 있습니다. 자체 DNS 패킷 구문 분석을 구현하는 대신 twisted.names을 사용해야합니다.

관련 문제