2011-10-31 3 views
0

다음은 서비스 내에서 실행중인 코드입니다. 대부분의 경우 스크립트는 딸꾹질과 충돌이 발생할 때까지 며칠/주 동안 잘 실행됩니다. 나는 그 오류의 원인을 패치를 적절하게 기록 할 수 있기 때문에 충돌에 대해 그렇게 걱정하지 않는다. 내가 직면 한 문제는 때로는 서비스가 다시 시작되어 서버에 다시 연결하려고 시도 할 때 서비스가 다시 시작될 수 없도록 (10061, 'Connection refused') 오류가 발생한다는 것입니다. 기괴한 부분은 연결이 거절 될 때 실행되는 파이썬 프로세스가 없다는 것입니다. IE 이미지 이름이 "pythonw.exe"또는 "pythonservice.exe"인 프로세스가 없습니다. 클라이언트 스크립트를 실행하는 컴퓨터를 재설정 할 때까지는 다른 컴퓨터에서도 서버에 연결할 수 없습니다. 클라이언트 컴퓨터는 Windows 서버 2003 OS에서 Python 2.7을 실행 중입니다. 또한 서버는 코드에 액세스 할 수없는 하드웨어에 코딩되어 있습니다.서버 장치에서 연결이 거부되었습니다. 클라이언트 컴퓨터를 리셋합니다.

try:    
     EthernetConfig = ConfigParser() 
     EthernetConfig.read('Ethernet.conf') 

     HOST = EthernetConfig.get("TCP_SERVER", "HOST").strip() 
     PORT = EthernetConfig.getint("TCP_SERVER", "PORT") 

     lp = LineParser() 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

     s.connect((HOST, PORT)) 
     reader = s.makefile("rb") 

     while(self.run == True): 

      line = reader.readline() 
      if line: 
       line = line.strip() 
       lp.parse(line) 
except: 

     servicemanager.LogErrorMsg(traceback.format_exc()) # if error print it to event log 
     s.shutdown(2) 
     s.close() 
     os._exit(-1) 

답변

0

네트워크 관리자가 연결하려는 포트를 닫았습니다. 서버에 속한 하나의 IP에 대해 열려 있습니다. 문제는 서버에 두 개의 별도 IP가있는 두 개의 네트워크 카드가 있다는 것입니다. 문제가 해결되었습니다.

1

연결 거부는 연결 상대방의 프로그램이 연결 시도를 수락하지 않는다는 것을 의미합니다. 아마도 당신이 부서 지거나 연결을 끊지 않았 음을 눈치 채지 못할 것입니다.

잠깐 (30-60 초) 조금만 자고 다시 시도하고 루프에서이 작업을 수행하고 다른 쪽에서 연결이 끊어져 새로운 연결을 다시 허용 할 수 있음을 알리시기 바랍니다.

+0

+1 지연이 좋은 생각입니다. 시도해 보겠습니다. 그러나 여전히 파이썬 프로세스가 열려 있지 않아도 여전히 서버에 연결할 수 없다는 것을 설명하지 못합니다. 얼마 후. – Richard

+0

@ 리차드 : 아니요, 연결을 거부하는 서버가 아닙니다. 당신의 목적에 아무런 문제가 없습니다. –

+0

도움 주셔서 감사합니다. 서버가 연결을 거부한다는 것을 알고 있습니다. 문서를 읽으면 한 번에 2 개의 연결 만 허용됩니다. 내가 이해할 수없는 것은 클라이언트 컴퓨터를 리셋 할 때 서버에 다시 연결할 수 있다는 것이므로 클라이언트 컴퓨터에서 연결을 사용하고 있다고 생각하게됩니다. 참으로. – Richard

관련 문제