2

クライアント側で 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 バイトを読み取るように言わないでください。私はこの方法を知っています。

4

1 に答える 1