Autor Beitrag
Frolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 48



BeitragVerfasst: Mi 21.11.12 23:24 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 48



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

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

cu
Narses

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



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

ausblenden 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!