![]() |
socket-problem (receive + send)
Hi
also ich hier folgendes schnippselchen:
Delphi-Quellcode:
Erklärung: Wenn jemand eine Verbindung mit dem Server aufbaut, dann wird über den Socket ein Text gesendet mit folgender Proc:
procedure TServer.ServerSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket); var anzahl:Integer; i:Integer; r_text:String; begin // Routine für Joinen if (flag_connected = True) then begin r_text:=Socket.ReceiveText; users.Items.Add(r_text); Memo1.Lines.add('Username: '+r_text); flag_connected := False; end; if (Socket.ReceiveText = 'New_join') then begin Memo1.Lines.add(Timetostr(now)+': New user connected'); flag_connected := True; end; // Ende Routine für Joinen if (flag_quit = True) then begin for i := 0 to users.Items.Count -1 do begin if (users.Items[i] = Socket.ReceiveText) then users.items.Delete(i); end; Memo1.Lines.add('Username: '+Socket.ReceiveText); flag_quit := False; end; if (Socket.ReceiveText = 'New_quit') then begin Memo1.Lines.add(Timetostr(now)+': User quit'); flag_quit := True; end; end;
Delphi-Quellcode:
Das Joinen klappt auch noch wunderbar...
Nachricht := 'New_join';
delay(500); ClientSocket2.Socket.SendText(Nachricht); Nachricht := nick.Text; delay(500); ClientSocket2.Socket.SendText(Nachricht); nun hab ich in dem Programm bei onClose noch das gleiche allerdings halt mit Nachricht := 'New_quit'... aber DAS funktioniert nicht. der server bekommt nicht das 'New_quit' und führ dementsprechend auch nichts aus... was könnte das Problem sein? Ich vermute ggf das man indem Empfangsteil nicht 2 mal hintereiander Socket.Receive abfragen kann? gruß |
Re: socket-problem (receive + send)
Moin!
Was mir auffällt: Wenn du einmal in dem OnClientRead ReceiveText() aufgerufen hast, dann kannst du es in der Procedure nicht nochmal aufrufen, da ReceiveText() dir den Inhalt des Empfangbuffers zurück gibt und dann leert. Also mache einmal ReceiveText(), speichere das in einer Variablen und untersuche diese dann... MfG Muetze1 |
Re: socket-problem (receive + send)
Zitat:
Stimmt, ist mir zwischenzeitlich auch eingefallen, hab ich auch so gemacht. Aber das hat ja leider nichts mit meinem Problem zu tun. Irgendwie tritt das auch nur sporadisch auf... |
Re: socket-problem (receive + send)
Versuch mal den Teil der OnClose in die OnCloseQuery zu verschieben. Es kann sein, dass zum Zeitpunkt des Sendens die Verbindung nicht mehr aktiv ist.
Greetz alcaeus |
Re: socket-problem (receive + send)
Moin!
Genauso gut ist die Trennung zwischen SendText() und ReceiveText() nie gewährleistet. Mit anderen Worten: Es kann leicht vorkommen, dass du mit ReceiveText() einen String bekommst, der von 2 SendText() gesendet wurde, also das er verbunden wieder empfangen wird. Da musst du dir eine ordentliche Trennung zu einfallen lassen... MfG Muetze1 |
Re: socket-problem (receive + send)
Hi muetze, das hab ich jetzt irgendwie nich verstanden... :shock:
|
Re: socket-problem (receive + send)
Moin!
Es kann sehr gut vorkommen, wenn du mit SendText einmal z.B. 'Hallo' sendest und irgendwo danach irgendwann auch noch 'du'. Nun kann es aber vorkommen das du bei ReceiveText einfach ein 'Hallodu' bekommst - weil es halt keine Sicherheit gibt, das 2 unterschiedliche SendText Aufrufe in einem ReceiveText enden. Nun verstanden? MfG Muetze1 |
Re: socket-problem (receive + send)
Ahh ja danke... nun da hätte ich denn ne Idee... ein Trennzeichenfolge ala ||-||
Also an jeden Text der gesendet wird wird ein ||-|| gehängt damit der Empfänger das aufteilen kann... nur wie geht das? bin ein delphi einsteiger.. in php geht sowas mit explode... |
Re: socket-problem (receive + send)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 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