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