2009-05-07 1 views
1

Windows 서비스를 만들기 위해 win32serviceutil/py2exe를 사용하여 내부 용 Python TCP/IP 서버를 작성했습니다.Windows 서비스로 실행되는 Python 서버에 액세스 할 수 없습니다.

Windows XP Pro SP3을 실행하는 컴퓨터에 설치했습니다. 그러나 서비스로 실행 중일 때는 연결할 수 없습니다. 다른 응용 프로그램과 함께 해당 주소/포트에 바인딩하려고하면 충돌이 발생하기 때문에 주소/포트에 바인딩되어 있는지 확인할 수 있습니다. 또한 Windows 방화벽 설정을 확인하고 적절한 예외를 추가했습니다. 간단한 콘솔 응용 프로그램으로 서버를 실행하면 모든 것이 예상대로 작동합니다. 그러나 서비스로 실행하면 작동하지 않습니다.

나는이 문제에 대해 막연하게 기억하고 있지만, 내 인생은 그 어떤 것도 기억할 수 없다.

제안, 누구?

답변

1

우선 Windows 서비스를 구현할 때마다 적절한 로깅을 추가해야합니다.

"작업을 차단하지 않고 완료 할 수 없습니다."예외로 인해 작업자 스레드가 종료되고있었습니다.

해결 방법은 연결을 수락 한 후 sock.setblocking(1)을 호출하기 만하면됩니다.

1

아마도 프로그램이 초기화 직후에 종료 될 수 있습니다. 계속해서 요청을 듣고 있는지 확인하십시오.

netstat -an |find /i "listening" 

그리고 프로그램에 구문 분석 된 명령 줄을 분석하십시오. 이를 수행하려면 procexp을 사용할 수 있습니다.

+0

다음은 관련 항목은 다음과 같습니다 TCP 서버 : 34300 로컬 호스트 : 1028 TIME_WAIT TCP 서버가 : 34,300은 [IP 주소 제거] : 4471이 TIME_WAIT TCP 서버 : 34300는 [컴퓨터 이름 제거] : 61001이 TIME_WAIT –

+0

이 프로그램은 명확하게 listening : 'TCP 0.0.0.0:34300 0.0.0.0:0 LISTENING 828 –

0

서비스가 로컬 시스템 계정이 아닌 Nertwork Service 계정으로 실행 중인지 확인하십시오. 나중에는 네트워크 액세스 권한이 없으며 서비스를 실행하는 기본 사용자입니다. 시작 메뉴의 관리 도구에서 서비스 응용 프로그램으로 이동하여 서비스를 검색하여 확인할 수 있습니다. 서비스를 마우스 오른쪽 단추로 클릭하면 속성으로 이동하여 해당 서비스가 실행되는 사용자를 변경할 수 있습니다.

+0

앞에서 언급했듯이, 대화식으로 실행할 때 작동합니다. 나는 또한 동일한 사용자로 서비스를 실행하려고 시도했지만 작동하지 않았다. –