Entwickler-Ecke
Internet / Netzwerk - Fragen zu UDP-Broadcast
Marco D. - Mo 12.12.05 21:36
Titel: Fragen zu UDP-Broadcast
Also UGrohne hat mir ja zu UDP-Broadcast geraten. Und in o'rallys Tutorial hab ich gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); var RecText: string; begin SetLength(RecText, AData.Size); AData.ReadBuffer(PChar(RecText)^, AData.Size); ShowMessage(ABinding.PeerIP + ' hat "' + RecText + '" gesendet.'); end; |
Ja könnt ihr mir mal bitte jede Codezeile erklären :flehan:
UGrohne - Di 13.12.05 00:12
Ist eigentlich relativ einfach. Die Parameter ABinding und AData stehen einmal für den Sender und das gesendete Packet. Da die Methode ReadBuffer als Parameter einen Zeiger auf einen String erwartet, müssen wir diesen vorbereiten, nämlich die Länger setzen. Das wird in der ersten Zeile mit SetLength gemacht, dieser wird AData.Size lang gemacht.
In der zweiten Zeile werden dann eben von ReadBuffer AData.Size Zeichen aus dem Puffer gelesen und mit Hilfe des Zeigers auf RecText (den man mit PChar(RecText)^ bekommt) in den String gespeichert.
Jo, ABinding.PeerIP ist wohl selbst erklärend.
Hab versucht das so einfach wie möglich zu erklären ;-)
Marco D. - Fr 16.12.05 21:59
Also ist das Read-Ereignis alles? Oder was muss man da noch schreiben? Aus dem Tutorial von O'rally werd ich auch nich schlau. :cry:
emteg - Mi 21.12.05 21:59
du hast schonmal das gleiche tutorial verwendet wie ich : )
ich benutz das genau so in meinem programm
LanChat2 [
http://www.lanchat2.de]. Kannst auf der HP da auch den ganzen quelltext runterladen.
Um deine frage zu beantworten: ja, das ist das ganze on read ereignis. So liest du JEDE ankommende udp nachricht auf dem eingestellten port. Egal ob es sich dabei um broadcasts handelt oder nicht.
Auf diese weise epmfängst du strings die über UDP gesendet werden. Anstatt von ShowMessage kannst du auch ne procedure dranhängen, welche die nachrichten analysiert und z.B. einen chat daraus baut. (Das ist mit udp ziemlich einfach: einfach jede nachricht broadcasten und eventuell einen nicknamen durch ein trennzeichen von der nachricht abtrennen und fertig.)
Wichtig ist, dass du ABinding.PeerIP verwendest und nicht ABinding.IP - weil nur im ersten fall erhälst du die adresse vom absender. (wofür ist eigentlich das letzte da?)
Was hast du denn noch für probleme mit dem UDP? Fragen dazu einfach an mich :)
Marco D. - Do 22.12.05 15:02
@ emteg:
Danke für deine Hilfe. ALso ich will mit UDP (- Broadcast) eine Liste aller im LAN vorhandenen Pcs bekommen. Ist das möglich? Wenn ja, gibst du mir Tipps dazu?
emteg - Fr 23.12.05 16:22
nur, wenn auf jedem pc ein client deiner software läuft. wenn du das nicht willst, musst du entweder die windowsAPI verwenden oder dir selber was basteln.
ich kann dir nur helfen, wenn auf jedem pc ein client läuft.
Marco D. - Sa 24.12.05 19:07
Am besten wäre ein WIN-API funktion aber bis jetzt hab ich keine gefunden :cry:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!