Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TIdTCPServer und -Client - senden und empfangen (https://www.delphipraxis.net/179786-tidtcpserver-und-client-senden-und-empfangen.html)

CocoPops 1. Apr 2014 19:09


TIdTCPServer und -Client - senden und empfangen
 
Liebe DP!

Ich stecke momentan an einem etwas, für mich, größerem Problem fest.

Ich habe zei Programme, einmal Server einmal Client.
Gehen wir davon aus, ich sei schon verbunden.

Sehr einfach gestrickt könnte der CLient so senden:
Delphi-Quellcode:
IdTCPClient1.Socket.WriteLn('Bernhard');
.
Und der Server könnte im OnExecute-Event so antworten:
Delphi-Quellcode:
AContext.Connection.Socket.WriteLn('Hallo ' + AContext.Connection.Socket.ReadLn); // Hallo Bernhard
.

Ich habe etwas von WriteBuffer und ReadBuffer gelesen. Das gibt es in Indy 10 abr nicht mehr also musste ich ein wenig umstricken (Google half mir):

Ich sende mit dem Client ein paar Bytes:
Delphi-Quellcode:
// Client : sendet Byte
procedure WriteByte(Value: Byte);
var
 Buf: TIdBytes;
begin
 Buf := IdGlobal.RawToBytes(Value, SizeOf(Value));
 IdTCPClient1.IOHandler.Write(Buf);
end;
Und im Server empfange ich diese auch korrekt:
Delphi-Quellcode:
// Server : empfaengt Byte
function ReadByte: Byte;
var
 aData: TIdBytes;
begin
 AContext.Connection.IOHandler.ReadBytes(aData, SizeOf(Byte));
 Move(aData[0], PByte(@Result)[0], Length(aData));
end;
Aber wie funktioniert das mit Strings? Momentan sende ich folgendermaßen:
Delphi-Quellcode:
// Client : sendet String
procedure WriteString(Value: string);
// var
// Buf: TIdBytes;
begin
 // Buf := IdGlobal.RawToBytes(Value, SizeOf(Value));
 IdTCPClient1.IOHandler.Write(Value);
end;
Aber beim empfangen tut sich nichts und das Execute-Event bleibt hängen:
Delphi-Quellcode:
// Server : empfaengt String (nicht)
function ReadString: string;
begin
 Result := AContext.Connection.IOHandler.ReadString(ReadByte); // ReadByte = siehe "Server : empfaengt Byte"
end;

Was mache ich falsch und welches ist die bessere Methode? Mit den Buffern oder einfach Socket.WriteLn, Socket.ReadLn ?

stahli 1. Apr 2014 22:54

AW: TIdTCPServer und -Client - senden und empfangen
 
Was willst Du denn genau machen? Streams senden?
Dann schau mal, ob Du über die zwei Links weiter kommst...
Meine aktuelle Lösung ist eine Mischung zwischen beiden, ich habe aber kein komplettes Testprojekt.

http://www.delphipraxis.net/170904-i...bertragen.html
http://www.delphipraxis.net/1184766-post15.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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