![]() |
TServerSocket kombiniert 2 Nachrichten...
Hallo!
Habe folgendes Problem mit meinem Chat-Programm (TServerSocket und TClientSocket): Nach dem Verbindungsaufbau zum Server sendet der Client einen Text (Nachricht 1). --> Server erhält den Text (Nachricht 1). --> Server will den Text an die Clients weiterleiten (Nachricht 1). --> Bei einer neuen Verbindung zu einem Client sendet der Server automatisch einen (anderen) Text an alle Clients (Nachricht 2). --> Server sendet beide Texte gleichzeitig. --> Client(s) empfängt/empfangen folgenden Text: Nachricht 1Nachricht 2 --> :evil: :evil: :evil: :evil: :kotz: --> (Server bzw. Client stürzen evtl. ab (z.B. wenn die Nachricht ein bestimmter Text ist, der dann einen Befehl ausführt...). ) Wie kann ich dieses Problem beheben? Hoffe, ich habe mich verständlich ausgedrückt. Danke im Voraus! MfG PS: Ich habe die Suche benutzt, aber nichts gefunden. Ich weiß auch gar nicht genau, nach was ich suchen soll. |
Re: TServerSocket kombiniert 2 Nachrichten...
Zitat:
...:cat:... |
Re: TServerSocket kombiniert 2 Nachrichten...
Zitat:
|
Re: TServerSocket kombiniert 2 Nachrichten...
Alles was du in den SOcket reinschreibst, kommt hintereinander an, d.h. wen ndu in funktion 1 sendtext("hallo") schreibst und in einer anderen sendtext(" du") wird "hallo du" ankommen.
Einzige Ausnahme wenn die beiden Befehle zeitlich soweit auseinander liegen, dass der Winsock-Buffer vorher gesendet wird. Ich hab das immer so gelöst, dass ich vor die Nachricht die Länge der Nachricht geschrieben und im Empfangs-Handler die Nachrichten wieder auseinandergefriemelt habe. Beispiel: sendtext(inttostr(5)+','+'Hallo'); sendtext(inttostr(3)+','+' du'); Dabei musst du aber auchnoch aufpassen, da von "5, Hallo" evtl. zu diesem Zeitpunkt nur "5, H" angekommen sind. Und die "allo" noch auf der Leitung unterwegs sind. D.h. die Empfangs+verarbeitungsroutine muss schon etwas aufwendiger sein. Oder liege ich da falsch? |
Re: TServerSocket kombiniert 2 Nachrichten...
zeig doch mal deinen code... sendest du auch #13#10 ?
|
Re: TServerSocket kombiniert 2 Nachrichten...
Zitat:
Delphi-Quellcode:
Die Nachricht, die ich vom Client sende beinhaltet auch #13#10:
// OnConnect von Client:
if ClientSocket1.active=true then //Im Falle das ClientSocket verbunden ist wird die Message aus edit1 verschickt begin ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat'); end; // OnClientRead von Server msg:= Socket.ReceiveText; vonWem:= socket.RemoteAddress; {...} for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin // Anzahl der Teilnehmer with ServerSocket1.Socket.Connections[I] do begin // Auswahl des Teilnehmers if (Connected) then SendText(msg); // Text senden end; end; // OnClientConnent von Server: for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin with ServerSocket1.Socket.Connections[I] do // Anzahl der Teilnehmer begin // Auswahl des Teilnehmers if (Connected) then SendText('/\/UsernameSenden') ; // Text senden erfolgreich:= True; end; // OnRead von Client: msg:= Socket.ReceiveText; if Copy(msg, 1, 3) <> '/\/' then begin If (SoundAbspielen= True) and ( Copy(msg, 1, length(form2.LabeledEdit2.Text)) <> Form2.LabeledEdit2.Text) then mediaplayer1.Play; Memo1.Lines.Add(msg); //text wird eingetragen end else begin befehl:= copy(msg, 4, Length(msg) - 3); BefehlAusfuhren(befehl); end;
Code:
Hoffe, jetzt ist es klarer, wo mein Problem liegt...
nachricht:= Nickname + ' (' + DateTimeToStr(now) + '):' + #13 + #10 + edit2.Text + #13 + #10;
ClientSocket1.Socket.SendText(nachricht); Edit1: Ist das Problem evtl. mit Indy behoben? |
Re: TServerSocket kombiniert 2 Nachrichten...
hi,
änder mal das: "ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat'); " in das:
Delphi-Quellcode:
am besten für alle sendtext commands die du hast
ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat' + #13#10);
|
Re: TServerSocket kombiniert 2 Nachrichten...
Zitat:
'Nachricht 1 Nachricht 2' (^^^^ auch in einem String...) |
Re: TServerSocket kombiniert 2 Nachrichten...
Da du meinen Betrag ja ignorierst, dann lies doch in der Emfangsroutine einfach bis #13#10 ein, dann hast du das Problem auch gelöst.
|
Re: TServerSocket kombiniert 2 Nachrichten...
Zitat:
'5,Hallo3, du' --> also: 'Hallo3, du' ? Was mich auch interessiert, ist, ob es mit Indy (oder einer anderen Kompo) dieses Problem nicht kommt. Dann würde ich mir halt die Arbeit machen, und "alles" umschreiben. MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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