Indy TCP Server/Clientを介してレコードを転送する方法を理解する上で助けが必要です。私はクライアントと別のサーバに2つのプログラムを持っています。私は接続入れるボタン上のクライアントで :クライアントはTIdTCPClientDelphi TidTCPServerとTidTCPClientレコードを転送する
Client.Connect();
であり、サーバー側で私はからのデータを送信するにはServerConnectイベント
Protocol.Lines.Add(TimeToStr(Time)+' connected ');
に、クライアントが接続されていることをメモに行を追加していますクライアント私が送信したいレコードを、持っている:
Tmyrecord = record
IPStr: string[15];
end;
をそして私はそこに送信ボタンがあります。
01私は、次のコードを持っているONEXECUTEprocedure 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;
は、サーバー側では、私はあまりにもサーバ側で同じ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要素を読みたい。クライアント側から送信ボタンを押すと、アプリケーションがハングします。
事前にどうもありがとう
レコード、msRecInfoは、どの要素にIPSTR要素があるかを示します。私はそのレコードを送って、それをサーバーから読みたいと思います。私はサーバ側の私の記録からIPSTRを読んでほしい –
あなたの質問をきれいにしてこれがあなたの1つの質問であることを明確にするためのちょっとした提案。 –
提案のおかげで、私の質問が編集されました。今はもっと良いと思っています。 –