Hallo Experten,
ich habe einige Probleme mit der TIdUDPServer-Komponente. In meinem PC hab ich zwei Netzwerkadapter mit folgenden IP/MACID Konfigurationen:
Adapter1: IP 192.168.240.135 MAC-ID 00...A2
Adapter2: IP 192.168.240.199 MAC-ID 00...DB
Für die MAC-ID hab ich jetzt nur MSB und LSB dargestellt, reicht zur eindeutigen Identifikation...
Bevor ich zwei Adapter in meine System hatte, habe ich die Eigenschaften des UDPServers einfach in der IDE vorinitialisiert und habe mir die lokale IP mittels
besorgt. Anschliessend konnte ich problemlos kommunizieren.
Jetzt versuche ich zur Laufzeit auf beide Adapter zuzugreifen und auch getrennt zu kommunizieren. In nachfolgendem Beispiel läuft die Kommunikation bereits via Adapter1. Nun versuche ich auf Adapter2 zuzugreifen. Dazu gehe ich folgendermaßen vor:
Das Resultat ist leider nicht das gewünschte. Statt das Paket aus Adapter2 rauszuschieben, sendet er es physikalisch immer noch aus Adapter1, schreibt aber in das Paket als SourceIP die 192.168.240.199 rein. Das kann man z.B. daran erkennen, das die MAC-ID im Paket immer noch 00...A2 ist.
Wie kann ich den UDPServer dazu veranlassen den Adapter zu wechseln?
Im Voraus Danke für die Hilfe!
Bodo
ich habe einige Probleme mit der TIdUDPServer-Komponente. In meinem PC hab ich zwei Netzwerkadapter mit folgenden IP/MACID Konfigurationen:
Adapter1: IP 192.168.240.135 MAC-ID 00...A2
Adapter2: IP 192.168.240.199 MAC-ID 00...DB
Für die MAC-ID hab ich jetzt nur MSB und LSB dargestellt, reicht zur eindeutigen Identifikation...
Bevor ich zwei Adapter in meine System hatte, habe ich die Eigenschaften des UDPServers einfach in der IDE vorinitialisiert und habe mir die lokale IP mittels
Code:
AnsiString localIP; UDPServer1->Active=true; localIP=GStack->LocalAddress;
Jetzt versuche ich zur Laufzeit auf beide Adapter zuzugreifen und auch getrennt zu kommunizieren. In nachfolgendem Beispiel läuft die Kommunikation bereits via Adapter1. Nun versuche ich auf Adapter2 zuzugreifen. Dazu gehe ich folgendermaßen vor:
Code:
TStrings *Interfaces;//Strings of Networkinterfaces AnsiString localIP; Interfaces=GStack->LocalAddresses; UDPServer1->Binding->CloseSocket(); UDPServer1->Binding->AllocateSocket(Id_SOCK_DGRAM,Id_IPPROTO_UDP); UDPServer1->Binding->SetBinding("192.168.240.199",30444,Id_IPv4); if(UDPServer1->Binding->HandleAllocated) UDPServer1->Binding->Bind(); UDPServer1->Active=true; localIP=GStack->LocalAddress; UDPServer1->Send("192.168.240.136",30444,"miau!");
Wie kann ich den UDPServer dazu veranlassen den Adapter zu wechseln?
Im Voraus Danke für die Hilfe!
Bodo
Comment