Hi,
leider kann ich kein Beispiel in Jabaco bieten. Ich habe das bisher nur in C++ gemacht und dazu Microsoft-Beispiele aus MSDN abgewandelt.
Vielleicht hilft auch dieser
Artikel.
Hier ist eine Implementation in
Java, die man vermutlich gut auf Jabaco portieren kann.
Die Herausforderung bei Multi-Server bzw. Multi-Threaded Winsock besteht darin, dass man pro ankommendem TCP/IP-Request einen neuen Thread aufmacht. Insgesamt hat man also einen Haupt-Thread, der auf neue Anfragen wartet und pro aktivem Socket einen separaten Thread. Um das hinzukriegen, muss man sich nicht nur mit TCP/IP- und Winsock-Programmierung sondern auch mit Multi-Threading auskennen bzw. anfreunden.
Das Multi-Threading erfordert, dass alle Zugriffe auf gemeinsame Variable gegeneinder verriegelt werden. Außerdem kann man Probleme bekommen, wenn einzelne Aufrufe bzw. Methoden nicht "thread-safe" sind, d.h. fehlerhaft arbeiten, sobald sie von mehreren Threads parallel aufgerufen werden. Sämtliche Threads müssen auch zuverlässig terminiert werden, wenn das Gesamtprogramm enden muss oder soll. Auch die Fehlerbehandlung ist nicht trivial. Jabaco bietet "synchronized" Methoden, die aus parallelen Threads aufgerufen werden können, ohne sich in die Quere zu kommen.
Ich sollte noch erwähnen, dass man einen Multi-Server auch mit einem einzigen Thread ("single-threaded") realisieren kann. Dann muss dieser Thread allerdings in der Lage sein, auf Ereignisse mehrerer/vieler Sockets gleichzeitig zu warten und diese dann hintereinander abzuarbeiten. Im Jabaco-Winsock habe ich dazu keinen Mechanismus gesehen.
Viel Erfolg!
A1880