[Python-de] nt-dienst

Rene Liebscher R.Liebscher at gmx.de
Wed Jun 6 18:38:09 EDT 2001


Frank Immich wrote:
> 
> Hallo zusammen,
> kann mir vielleicht jemand noch einmal weiterhelfen ? Ich versuche gerade
> eine Socket-Verbindung   als Dienst unter NT laufen zu lassen. Ich habe auch
> die Bsp. unter win32/demos/service... gefunden nur komme ich hier mit meinem
> "try and error" Prinzip  nicht weiter. Vielleicht hat jemand Zeit mir
> weiterzuhelfen. Es folgt mein Versuch, einen absolut simplen socket server als
> NT-Dienst zu realisieren. Für eventuellen grenzenlosen Dilettantismus entschuldige
> ich mich im voraus ;-)  Ich wäre allerdings dankbar für jedes (nette)
> Kommentar.
> 
> import sys, os, string
> from socket import *
> import win32serviceutil
> import win32service
> import win32event
> import pywintypes
> 
> port = 4127
> BUFSIZE = 1024
> 
> class TestPipeService(win32serviceutil.ServiceFramework):
>         _svc_name_ = "test"
>         _svc_display_name_ = "test"
>         def __init__(self, args):
>                 win32serviceutil.ServiceFramework.__init__(self, args)
>                 self.hWaitStop = CreateEvent(None, 0, 0, None)
>                 self.overlapped = pywintypes.OVERLAPPED()
>                 self.overlapped.hEvent = CreateEvent(None,0,0,None)
> 
> def SvcStop(self):
>                 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>                 SetEvent(self.hWaitStop)
> 
> def SvcDoRun(self):
> 
>         s = socket(AF_INET, SOCK_STREAM)
>         s.bind(('', port))
>         s.listen(1)
>         while 1:
> 
>         # hier klemmt es... wie vernüpfe ich  overlapped.hEvent mit dem
> socket ???
> 
>                 myHandels = self.hWaitStop, self.overlapped.hEvent
>                 stp =
> win32event.WaitForMultipleObjects(myHandels,0,win32event.INFINITE)
>                 if stp==win32event.WAIT_OBJECT_0:
>                     break
>         # kann man das im folgenden so einfach machen ?
>                 else:
>                     conn, (remotehost_ip, remoteport) = s.accept()
>                     hostname, aliaslist, ipaddr = gethostbyaddr
> (remotehost_ip)
>                     data = conn.recv(BUFSIZE)
>                     if not data:
>                            break
>                     data = data + " host:" + hostname
>                     conn.send(data)
>                     conn.close()
> 
> if __name__=='__main__':
>     win32serviceutil.HandleCommandLine(test)
> 
Im Modul win32file findet sich die Funktion AcceptEx die kann mit 
Overlapped umgehen, und auf jeden Fall muss dann die Overlapped-Funktion
(bei dir das accept) vor den Warte-Befehl (WaitForMultipleObjects).

( Mehr kann ich jetzt auch nicht helfen, ich habe overlapped noch nicht
mit
Python benutzt.)


MfG
Rene Liebscher



More information about the Python-de mailing list