IndyTCPサーバー/クライアントを介してレコードを転送する方法を理解するのに助けが必要です。私は2つのプログラムを持っています。クライアントと別のサーバーを配置します。クライアントのボタンに接続します:クライアントはTIdTCPClientです
Client.Connect();
そしてサーバー側では、ServerConnectイベントで、クライアントが接続されていることをメモする行を追加しています
Protocol.Lines.Add(TimeToStr(Time)+' connected ');
クライアントからデータを送信するために、送信したいレコードがあります。
Tmyrecord = record
IPStr: string[15];
end;
そして、私はそこに送信ボタンを持っています:
procedure Tform1.ButtonSendClick(Sender: TObject);
var
MIRec: Tmyrecord;
msRecInfo: TMemoryStream;
begin
MIRec.IPStr := '172.0.0.1';
msRecInfo := TMemoryStream.Create;
msRecInfo.Write(MIRec, SizeOf(MIRec));
msRecInfo.Position := 0;
Client.IOHandler.Write(msRecInfo);
end;
サーバー側のonexecuteには、次のコードがあります。サーバー側でも同じtmyrecordが宣言されています。
procedure TServerFrmMain.ServerExecute(AContext: TIdContext);
var
MIRec: Tmyrecord;
msRecInfo: TMemoryStream;
begin
if AContext.Connection.Connected then
begin
AContext.Connection.IOHandler.CheckForDataOnSource(10);
if not AContext.Connection.IOHandler.InputBufferIsEmpty then
begin
msRecInfo:= TMemoryStream.Create;
AContext.Connection.IOHandler.ReadStream(msRecInfo);
msRecInfo.Read(MIRec, sizeOf(msRecInfo));
ShowMessage(MIRec.IPStr);
end;
end;
end
なぜ機能しないのか、クライアント側から書いたIPアドレスを表示できないのかわかりません。クライアント側から送信しているサーバー側のレコード(msRecInfo)を読み取りたい。レコード要素にアクセスしたい。この場合、レコードのIPSTR要素を読み取りたい。クライアント側から送信ボタンを押すと、アプリケーションがハングし、サーバー部分がハングします。
よろしくお願いします