Entwickler-Ecke

Internet / Netzwerk - Problem bei TCP im Netzwerk (andere Prog-Instanz finden)


Frolo - Mi 21.11.12 23:24
Titel: Problem bei TCP im Netzwerk (andere Prog-Instanz finden)
Hey,

ich möchte gerne 2 PCs mit TCP (oder etwas anderem, wenn es besser ist) kommunizieren lassen. Das Problem ist, dass beide sich jedes mal über DHCP eine neue IP vom Router holen und so keiner der beiden eine statische hat. Ich möchte, dass diese sich verbinden und Nachrichten austauschen können. Die Grundidee ist folgende.

PC1 startet das Programm -> "scannt Netzwerk, ob eine andere Instanz auf einem PC im Netzwerk gestartet ist :

wenn ja, einfach verbinden
wenn nein, einen TCP Server starten

Das Problem ist allerdings, wie scanne ich das Netzwerk nach laufenden Instanzen meines Programms? Ich könnte jetzt alle IPs durchgehn und schaun ob da was an dem Port lauscht, aber das wäre doch ineffizient oder?

Bin für jede Hilfe und Verbesserungsvorschläge dankbar (:

Moderiert von user profile iconNarses: Titel geändert, war: "Riesenproblem, bei TCP im Netzwerk".


jfheins - Mi 21.11.12 23:37

Das ist grundsätzlich kein Problem, geht aber nicht mit TCP. TCP Verbindungen haben stets genau 2 Teilnehmer.
Integriere einen UDP Server in dein Programm. Wenn es gestartet wird, verschickst du über UDP einen Broadcast. Computer im Netzwerk können dir dann Bescheid geben dass sie da sind.


Frolo - Mi 21.11.12 23:44

Ich dachte immer TCP könnte mehrere Clients haben. Naja okay ich schick nen Broadcast. Ich versuch das mal danke


Narses - Do 22.11.12 11:19

Moin!

user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Das ist grundsätzlich kein Problem, geht aber nicht mit TCP. TCP Verbindungen haben stets genau 2 Teilnehmer.
user profile iconFrolo hat folgendes geschrieben Zum zitierten Posting springen:
Ich dachte immer TCP könnte mehrere Clients haben. Naja okay ich schick nen Broadcast. Ich versuch das mal danke
Ein TCP-Server kann auch mehrere Verbindungen halten, ein TCP-Client aber immer nur eine. ;)

Hier geht´s aber um was ganz anderes:
user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Integriere einen UDP Server in dein Programm. Wenn es gestartet wird, verschickst du über UDP einen Broadcast. Computer im Netzwerk können dir dann Bescheid geben dass sie da sind.
Ein Beispiel, wie man das umsetzen könnte, findest du hier in der FAQ [http://www.entwickler-ecke.de/topic_Andere+Programminstanzen+der+eigenen+Anwendung+im+LAN+finden_109283.html]. :les: :think:

cu
Narses


Frolo - Do 22.11.12 20:02

So, habe mir auch die FAQ durchgelesen, wollte das aber trotzdem lieber mit Indy machen und bekam Probleme. Ich habe es geschafft über einen idUDPClient einen Broadcast zu schicken, das kam auf dem anderen PC sogar an. Es stellen sich nur ein paar Fragen:

Ich habe zum Senden das verwendet:


Delphi-Quelltext
1:
IdUDPClient1.Broadcast('Hey',1243);                    


Und empfange den Broadcast auf dem anderen PC via IdUDPServer "OnUDPRead". Das Problem ist, das "AData" vom Typ "array of Byte" ist und ich ja an den Text "Hey" rankommen will. Wie mache ich das?

Außerdem würde ich hierbei wenn möglich gerne die Firewall irgendwie umgehen, einfach weil ich das besser finde. Kann man das bei UDP also vllt auch ohne Server lösen?


Und zur letzten Frage: Ich weiß grob was die Unterschiede zwischen TCP und UDP ist, aber warum kann nur der eine Broadcasten??



Danke!