Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ClientSocket sendet Buffer mit falschem Inhalt (https://www.delphipraxis.net/27436-clientsocket-sendet-buffer-mit-falschem-inhalt.html)

pmw 10. Aug 2004 09:58


ClientSocket sendet Buffer mit falschem Inhalt
 
Hallo!

Bei meinem Programm empfängt der ServerSocket aus unerklärlichen Gründen den falschen Buffer vom ClientSocket. Wenn ich sText (der Buffer der gesendet wird) mit einer Konstanten belege funktioniert es aber merkwürdigerweise. Und das obwohl ShowMessage in beiden Fällen jedes mal das selbe anzeigt. Ich verseh die Welt nicht mehr :(

Delphi-Quellcode:
procedure TfrmClient.btnVerbindeClick(Sender: TObject);
var
  SText: String;
begin

  if MainForm.ClientSocket.Active = True then
    MainForm.ClientSocket.Active := False;
     
  MainForm.ClientSocket.Active := True;

  while MainForm.ClientSocket.Active = False do
    Application.ProcessMessages; // Warten bis Verbindung zum Server besteht

  { SeverSocket empfängt hier immer zufällige Zeichenketten }
  sText := '@0' + MainForm.frmMulti.edtSpielername.Text;
  ShowMessage(sText); // ShowMessage zeigt richtig "@0Mensch" an
  { Ende }
 
  { SeverSocket empfängt hier dei richtige Zeichenkette '@0Mensch' }
  sText := '@0Mensch';
  ShowMessage(sText); // ShowMessage zeigt richtig "@0Mensch" an
  { Ende }

  MainForm.ClientSocket.Socket.SendBuf(sText, length(sText));

end;
Delphi-Quellcode:
procedure TMainForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  sText: string;
begin

  SetLength(sText, Socket.ReceiveLength);
  Socket.ReceiveBuf(sText, length(sText));

  ShowMessage(sText);
{ Im ersten Fall (sText := '@0' + MainForm.frmMulti.edtSpielername.Text) ist der Inhalt von ShowMessage zufällig (mal 'TMainForm', mal '127.0.0.1' usw.). Aber nie das selbe wie ShowMessage in btnVerbindeClick }
{ Im 2. Fall (sText := '@0Mensch') wird immer das richtige '@0Mensch' angezeigt. Also das selbe wie ShowMessage in btnVerbindeClick }

end;
Viele Grüße
pmw

Muetze1 11. Aug 2004 01:03

Re: ClientSocket sendet Buffer mit falschem Inhalt
 
Moin!

Geben mal dem SendBuf() und ReceiveBuf() immer das 1. Zeichen vom String an beim Aufruf.

Bsp:
Code:
  ...Socket.ReceiveBuf(sText[1], Socket.ReceiveLength);
MfG
Muetze1

pmw 11. Aug 2004 06:55

Re: ClientSocket sendet Buffer mit falschem Inhalt
 
Hi Muetze1!

Vielen Dank für deine Antwort. Ich habe gestern den ganzen Tag mit der Fehlersuche verbracht und ihn nicht gefunden. Deine Lösung funktioniert wie gewünscht :-D

:bouncing4: :cheers: :bounce1: :dance: :hello:

Viele Grüße
pmw


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz