Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TidudpServer "Socket konnte nicht gebunden werden" (https://www.delphipraxis.net/209476-tidudpserver-socket-konnte-nicht-gebunden-werden.html)

markusagb 12. Dez 2021 13:08

TidudpServer "Socket konnte nicht gebunden werden"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

erst mal einen schönen dritten Advent an Euch.

Ich habe lange rumgesucht, leider kein brauchbares Ergebnis bekommen. Ich empfange mit TidUDPServer (Indy) Daten von einem anderen Programm
(Ich bekomme einen String welcher je nach Inhalt ausgewertet wird).

Solange ich in der "localhost" Umgebung bin, also das andere Programm auf dem gleichen Rechner läuft, funktioniert das super über die
localhost-IP 127.0.0.1 (+egal welcher Port ab 2000). Ich empfange die Daten und alles ist gut.

Wenn aber das andere Programm von dem ich die Daten bekomme von einem anderen Rechner in meinem Home-Netzwerk (Testumgebung) kommt,
und ich eine IP wie 192.168.1.20 (oder egal welche) inkl. egal welcher Port verwende, dann erhalte ich die Fehlermeldung beim Start meiner Anwendung:

"Socket konnte nicht gebunden werden. Adresse und Port werden bereits verwendet"

Aber: wenn ich die IP auf 0.0.0.0 und (egal welcher Port ab 2000) in der Komponente setze, dann bekomme ich vom externen
Rechner meine Daten (da mir der TidUDPServer ALLE IPs mit dem Port abhört. Auch kann ich neben dem localhost meine eigene IP
binden (192.168.1.20), da bekomme ich auch keinen Fehler.

Nun meine Frage: warum kann ich keine IP aus meinem Netzwerk einsetzen?

Facts:
Alle verwendeten Ports auf meinem PC sind frei
Kein weiteres Programm bzw. Dienst blockiert meine Ports
Es betrifft ALLE IP Adressen von 192.168.1.0 bis 192.168.1.255
PC Firewall hat keine Einschränkungen, auch ausgeschaltet gleicher Fehler
Beim Test im Netzwerk unserer Firma = gleiches Problem
Router = Netgear
Modem=FritzBox

Code:
procedure TForm2.UdpConfig;
var
Binding: TIdSocketHandle;
begin
Try
Form1.IdUDPServer1.Bindings.Clear;
Binding:=Form1.IdUDPServer1.Bindings.Add;
Binding.IP:=192.168.1.100;
Binding.Port:=21100;
Form1.IdUDPServer1.DefaultPort:=21100;
Form1.IdUDPServer1.Active:=True;
except
On E:Exception do messagedlg(E.Message,mterror, [mbOK], 0, mbOK);
end;
end;

IP-Version = Id_IPv4
RADStudio 10.1 Delphi
Indy 10

Auch wenn ich die TidUDPServer Komponente direkt konfiguriere und das Binding in der Komponente vorgebe, passiert das Gleiche.
Ich vermute den Fehler bei mir - eventuell habe ich etwas übersehen... am Netzwerk oder den Ports liegt es zu 99% nicht.

Ich komm da jetzt leider nicht mehr weiter und hoffe auf Eure Hilfe.

Danke schon mal!!!

Markus

mjustin 12. Dez 2021 22:18

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Man kann nur an IP Adressen des Hosts binden auf dem der Server läuft. Man kann nicht an beliebige andere IP Adressen im Netzwerk binden.
Vielleicht ist Text auch noch ein Fehler / unklare Beschreibung.
Da darin zwei Mal die IP 192.168.1.20 genannt, einmal mit und einmal ohne Fehlermeldung.

markusagb 13. Dez 2021 00:20

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Danke lieber Michael, ich hatte es befürchtet. Sorry für die 192.168.1.20, das ist die Rechner IP vom localhost, die funktioniert natürlich. Danke für den Hinweis.

Wie realisiere ich dann den Empfang von einer IP eines anderen PC im Netzwerk? Gibt es hierfür eine Indy-Componente oder muss ich das für UDP selbst schreiben?

Danke für Deine Antwort, dann muss ich jetzt nicht weiter in meinem Code rumprobieren…

Einen schönen Wochenstart!

Markus

hhcm 13. Dez 2021 06:40

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Ich scheine die Frage falsch zu verstehen.
Du bindest am "Server" deine IP und den Port. (Die IP muss am "Server" eingerichtet sein)

Der Client schickt zum "Server"

Warum möchtest du eine Fremde IP auf dem Server binden? Mir erschliesst sich der Sinn nicht.

markusagb 13. Dez 2021 07:44

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Guten Morgen,

ich möchte von der gebundenen IP Daten von einem Programm empfangen (sendet UDP). Deshalb soll der Server den Port dieser IP (anderer PC im Netzwerk) lesen…

Beispiel:

Pc 192.168.1.38 (Programm nicht von mir) >>> UDP Port 21100 >>> Pc 192.168.1.20 mit TidUDPServer der die Daten auswertet

Liebe Grüße!

hhcm 13. Dez 2021 08:18

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Du kannst von einem Client keine Daten abrufen.
Wenn dein Programm etwas abrufen muss, dann ist es der UDPClient nicht UDPServer.
Der Server macht nur sinn, wenn das sendende Programm den Server anspricht.

philipp.hofmann 13. Dez 2021 11:54

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Schau dir mal die Tethering-Demo(s) an (C:\Users\Public\Documents\Embarcadero\Studio\xx.0 \Samples\Object Pascal\RTL\Tethering). Die setzen auch auf Indy auf und macht vielleicht genau das, was du hier suchst.

markusagb 13. Dez 2021 12:58

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Danke vielmals, das sollte helfen! Ich melde mich wenn es funktioniert. Bis dahin allen eine schöne Woche!!
Und nochmals Danke fürs Tipp geben!

mjustin 14. Dez 2021 12:57

AW: TidudpServer "Socket konnte nicht gebunden werden"
 
Zitat:

Zitat von markusagb (Beitrag 1499016)
ich möchte von der gebundenen IP Daten von einem Programm empfangen (sendet UDP). Deshalb soll der Server den Port dieser IP (anderer PC im Netzwerk) lesen…

Tipp: denke bei "Port" einfach an "Hafen". Der Port (Hafen) liegt am Server (Hafenstadt). Man kann Schiffe (Datenpakete) an einen Port senden, dann kommen sie irgendwann dort an. Oder es kommen Schiffe (Daten) am Port an, die irgendwann an einem anderen Port abgesendet wurden... Man kann nicht von einer Hafenstadt (Server A) aus sehen ("lesen"), welche Daten am Port (Hafen) einer anderen Hafenstadt (Server B) aktuell stehen. Man kann nur warten, bis sie in A ankommen.
(Ja, es gibt mehrere Ports an einem Server, aber die sind halt nummeriert und man könnte sie mit Liegeplätzen vergleichen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz