![]() |
Problem mit ICS und Broadcasting
Nabend,
ich hab vor einen Session Manager für ein selbstgeschriebenes Netzwerkspiel zu schreiben. Man soll in der Servervariante also einen Server erstellen können, den die Clients dann per Broadcast finden können. Einmal gefunden, werden die Adressen ausgetauscht und in einem Memo angezeigt. Ich hab diesbezüglich einen Beitrag hier im forum gefunden, der mir vorerst weitergeholen hatte, aber nun bin ich doch wieder ratlos. Ich habe sowohl für die Server- als auch für die Clientvariante je zwei WSockets verwendet. Immer einen als Server und einen als Client. Das Ganze sieht dann so aus: Clientseite:
Delphi-Quellcode:
Serverseite:
procedure TForm2.Button1Click(Sender: TObject);
begin with sesserver do begin Proto := 'udp'; Addr := '0.0.0.0'; Port := '6001'; LocalPort := '0'; Listen; end; with sesclient do begin Proto := 'udp'; Addr := edit1.text //Broadcast Adresse eingeben (etwa: 192.168.6.255) Port := '6001'; LocalPort := '0'; Connect; end; sesclient.SendStr(GetMyIp + '_Server?'); end; procedure TForm2.sesserverDataAvailable(Sender: TObject; ErrCode: Word); var incoming, msg, ip : string; position : integer; begin incoming := sesserver.ReceiveStr; position := pos('_',incoming); msg := copy(incoming, position, 7); ip := copy(incoming, 1, position); if msg = 'Server!' then memo1.Lines.add(ip + msg); end;
Delphi-Quellcode:
Tja das Problem ist nun, dass offenbar nichts beim Server ankommt, da eine Testausgabe von "msg" nichts ergibt.
procedure TForm3.Button1Click(Sender: TObject);
begin with sesserver do begin Proto := 'udp'; Addr := '0.0.0.0'; Port := '6001'; LocalPort := '0'; Listen; end; procedure TForm3.sesserverDataAvailable(Sender: TObject; ErrCode: Word); var incoming, msg, ip : string; position : integer; begin incoming := sesserver.ReceiveStr; position := pos('_',incoming); msg := copy(incoming, position, 7); ip := copy(incoming, 1, position); if msg = 'Server?' then begin with sesclient do begin Proto := 'udp'; Addr := ip; Port := '6001'; LocalPort := '0'; Connect; end; sesclient.SendStr(GetMyIp + '_Server!'); end; sesclient.close; end; end; Bin etwas ratlos. Mach ich was falsch? Gibts irgendwo ne Doku zu den ICS Kompos? Hab keine gefunden. Achso noch zur Information: Ich habe bei allen 4 WSockets Multithreaded und Linemode auf True gesetzt. Weiß aber auch hier nicht wirklich, was das bewirkt, habe es nur in einem Beispiel gesehen, wo es damit funktionierte. Gruß Blackice |
Re: Problem mit ICS und Broadcasting
Wäre
![]() Oder besser: ![]() Ich habe zwar noch nix damit gemacht (kam noch nie in die Verlegenheit ein Sopiel zu schreiben ;) ), aber die Klassenstruktur sieht eigentlich ganz nett aus. :) Edit: Falscher Link... |
Re: Problem mit ICS und Broadcasting
klar wäre es das, aber da wir unter Delphi programmiert haben benötige ich das ganze für delphi. Leider Gottes steht uns in der Schule dann auch nur Delphi 3 zur Verfügung. Es gibt ja DirectX Ports für Delphi. etwa DelphiX o.ä. aber damit hatte ich zu große Schwierigkeiten beim eigentlichen Netzcode. Hier geht's ja nur um den Sessionmanager. Dass man das mit ICS machen kann, weiss ich. Nur nicht wo mein Fehler ist. Ich habe die gezeigte Lösung ja bereits hier im Board gefunden, leider steht dort nicht mehr als das, was ich schon in codeform geschrieben habe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz