Entwickler-Ecke

Internet / Netzwerk - Mehrere TServerSocket für den selben Port öffnen?


hvoegler - So 20.08.06 13:42
Titel: Mehrere TServerSocket für den selben Port öffnen?
Hallo,

ich suche die Lösung für folgendes Problem:
Ein TServerSocket wird normalerweise für einen bestimmten Port geöffnet und akzeptiert dann alle IP-Adressen, die auf dem System vorhanden sind (Netzwerkkarten, lokale IP-Adressen). Ich möchte aber mehrere TServerSockets für den gleichen Port öffnen, die jeweils nur Clients aus einem festgelegten IP-Adressbereich akzeptieren. Normalerweise geht das nicht, da man schon beim Öffnen eines zweiten Servers eine Fehlermeldung erhält.

Beispiel:
1) Ein Gateway-Programm soll auf der einen Seite als Modbus TCP Server arbeiten und auf der anderen als Modbus-RTU Master.
2) Ein anderes Gateway-Programm soll auf der einen Seite als Modbus TCP Server arbeiten und auf der anderen als Profibus-DP Master.
3) Ein weiteres Programm arbeitet als Modbus TCP Server, empfängt vom Client Daten, führt mit diesen Berechnungen durch und sendet sie wieder zurück.

Jetzt müssten 3 TServerSockets für die 3 Modbus TCP Server auf Verbindungenwünsche auf dem selben Port (502) aber unterschiedlichen IP-Adressen warten. Das geht aber so nicht, da nur ein Server für einen Port geöffnet werden kann.

Ich hab mal eine Lösung mit Indy gesehen, weiß aber nicht mehr wo und wie. Wer hat eine Lösung?

Danke.


Narses - So 20.08.06 15:06

Moin und :welcome: im Forum!

user profile iconhvoegler hat folgendes geschrieben:
Normalerweise geht das nicht, da man schon beim Öffnen eines zweiten Servers eine Fehlermeldung erhält.

Das hast du schon ganz richtig erkannt, das unterstützt die Socket-API nicht. Ich halte es deshalb für Zeitverschwendung, weiter nach einer Lösung in dieser Richtung zu suchen. :?

user profile iconhvoegler hat folgendes geschrieben:
Ein TServerSocket wird normalerweise für einen bestimmten Port geöffnet und akzeptiert dann alle IP-Adressen, die auf dem System vorhanden sind (Netzwerkkarten, lokale IP-Adressen). Ich möchte aber mehrere TServerSockets für den gleichen Port öffnen, die jeweils nur Clients aus einem festgelegten IP-Adressbereich akzeptieren.

Dann unterscheidest du die IP-Adressbereiche halt intern in deiner Server-Applikation. ;) Einfach drei Listen für die Connections aus den entsprechenden Bereichen, fertig. Processing-Threads dazu, dann passt das. Ist vielleicht etwas mehr Arbeit, aber so ist das eben.

cu
Narses


marconist - So 03.09.06 15:53

En tserversocket kann auf einem port mehrere Connections gleichzeitig bedienen und unterscheiden.

Das heisst:

Entweder hast du alle Funktionen in einem Programm zusammen gefasst unt etschedest anhand der remote ip, wie zu reagieren ist.

Oder du hast unterschiedliche Programme und einen proxy, der anhand der remote ip entscheidet, an welches Serverprogramm die Anfragen weiter gereicht werden.

srs
marconist


Raffo - So 03.09.06 16:04

Ich will nicht sagen, das ich begriffstutzig bin, aber es ist halt eine komplizierte Angelegenheit bei Dir. Vielleicht solltest Du in Richtung Chat Programme denken, wo ja auch nur EIN Server da ist und dieser mehrere Clienten (mit unterschiedlichen IPs) bedient.