Autor Beitrag
hvoegler
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 20.08.06 13:42 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
marconist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

xp sp2
D5 pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 300



BeitragVerfasst: 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.