サーバー側アプリケーションからクライアント側アプリケーションにデータベース レコードを渡そうとしました。クライアント側では、データをTStrings
コレクションに保存する必要があります。
複数行フィールドを渡すと、1 つの複数行データ項目ではなく、クライアント側で 2 つの別個のデータ項目を受け取ります! Unicode UTF8 ベースのコマンドでもそれを実行しようとしましたが、残念ながら結果は同じです。
サーバー側コード:
procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand);
var
myData: TStrings;
begin
myData := TStringList.Create;
myData.Add('12'); // ID
myData.Add('This is a multi line' + #13#10 + 'description.'); // Descriptions
myData.Add('Thom Smith'); // Name
try
ASender.Context.Connection.Socket.Write(myData, True{, TIdTextEncoding.UTF8});
finally
myData.Free;
end;
end;
myData
サーバー側のデバッグ時の値は次のとおりです。
myData[0] = '12'
myData[1] = 'This is a multi line'#$D#$A'description.'
myData[2] = 'Thom Smith'
クライアント側のコード:
procedure TForm1.Button1Click(Sender: TObject);
var
myData: TStrings;
begin
with TIdTCPClient.Create(nil) do
begin
Port := 1717;
Host := 'localhost';
try
Connect;
//IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
myData := TStringList.Create;
try
SendCmd('greating');
Socket.ReadStrings(myData, -1{, TIdTextEncoding.UTF8});
eID.Text := myData[0]; // ID TEdit
mDes.Text := myData[1]; // Descriptions TMemo
eTelNo.Text := myData[2]; // Name TEdit
finally
myData.Free;
end;
finally
Disconnect;
Free;
end;
end;
end;
myData
クライアント側のデバッグ時の値:
myData[0] = '12' myData 1 = 'これは複数行です' myData[2] = '説明。
Telnet の結果:
実は、これは説明フィールドの 2 行目に置き換えられてmyData[2]
いるはずです! 'Thom Smith'
の後に項目がありませんmyData[2]
。myData[3]
はもうアクセスできません。
Write
この問題は、Indy'sまたは手順に関連していると思いReadStrings
ます。ItemCount が 3 として送信されますが、2 つのアイテムが送信されます (1 つが正しく、次は 2 つにビークされています!)。
Write
手順myData[1]
を 2 行に分割せずに、キャリッジ リターン文字を反対側に渡すにはどうすればよいですか?
どうもありがとう。