2013-01-07 2 views
1

socketserver를 사용하여 TCP로 클라이언트에 이미지를 보내는 간단한 서버를 만들려고합니다. 먼저 카탈로그를 클라이언트로 보낸 다음 요청으로 응답합니다.SocketServer - Python - ConnectionAbortedError로 무한 루프 송수신

mainServer = MainServer.MainServer((init.adresse, int(init.port)), MainServer.MainHandler) 

때 : 나는 (그것이 다른 파일에 있어요) 내 서버를 만들려면이 줄을 사용 주에서

class MainHandler(socketserver.BaseRequestHandler): 
def handle(self): 

     while 1: 
      try: 
      # Sending the catalogue 
       # Using my methods to get my catalogue with a HTTP header 
      response = self.server.genHTTPRequest(self.server.init.catalogue) 
      self.request.sendall(response.encode()) 

      # Response of the client 
      self.data = self.request.recv(1024).decode() 
      if self.data: 
       print("Data received : {}".format(self.data)) 

     except: 
      print("transmission error") 
      break; 

: 내 서버의 핸들에서

,이 루프를 이 프로그램을 실행하면 클라이언트가 성공적으로 연결되어 카탈로그를 수신하지만 try/catch를 제외하고 일부 데이터 만 반환하고 프로그램은 점프합니다.

self.data = self.request.recv(1024).decode() 
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine 

내가, 어쩌면 동기화가 누락 문제 또는 내가 스레드를 사용해야 할 수도 있습니다 이해 안 함 : 시도/캐치하지 않으면이 오류가있어?

당신의 도움이

(I 파이썬 3.3을 사용하고 있습니다)

+0

연결이 재설정되고 있다고 생각합니다. 회선을 점검 (루프백) 해보십시오. 방화벽이나 바이러스 백신을 비활성화 할 수도 있습니다. – jary

+0

답변 해 주셔서 감사합니다. 문제가 해결되었습니다. 클라이언트가 잘못된 정보를 보내고 recv에 문제가있어서 클라이언트가 연결을 끊었 기 때문입니다. 그건 그렇고, 나는이 프로젝트에 SocketServer를 사용하기로 결정했다. –

답변

0

문제 때문에 sendall(response.encode())의 것이 self.request.recv(1024).decode()이 같은 소켓에서 수행되고있어 ConnectionAbortedError으로 이어질 수 주셔서 감사합니다.

다른 데이터를 소켓에 넣기 전에 소켓에서 모든 데이터를 읽어야합니다. 데이터 플러시와 같습니다.

+0

http://stackoverflow.com/questions/1472876/why-is-host-aborting-connection이 게시물은 많은 도움이 될 것입니다. – user3392401