クライアント側で 255 より短いデータを送信しようとしました。
このプロトコルでデータを送信しようとしています:
Lenghth+String
Byte+string
sample :
string = ABCD
sentdata = 4ABCD
ここに私のサーバー側のコードがあります:
procedure TfrmServer.tcpsrvr1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
a : array of byte;
I : Cardinal;
mystr : string;
b,Len : Byte;
begin
ClientSocket.ReceiveBuf(b,1,0);// first try : get lenght
Len := b;
SetLength(a,Len+1);
mmoRerult.Lines.Add(DateTimeToStr(now) + ' Data Len ' +
IntToStr(Len));
ClientSocket.ReceiveBuf(a,Len,0); // second try : this lone is not worked.
mystr := '';
for I := 1 to 10 do
begin
mystr := mystr + Chr(a[i]);
end;
mmoRerult.Lines.Add(mystr);
//Creating a stream
mmoRerult.Lines.Add('--------------------');
end;
問題は、最初にすべてのデータを読み取る場合ですが、データfirst try
を読み取ることsecond try
ができない場合、データが正しくないということです。読み取りポインターが前に出ていると思いますが、どうすればリセットできますか。
またClientSocket.BytesReceived
、読み取り前に受信したバイト数を教えてはいけません。
この問題を解決するにはどうすればよいですか。最初に 255 バイトを読み取るように言わないでください。私はこの方法を知っています。