我试图将数据库记录从服务器端应用程序传递到我的客户端应用程序。在客户端,我需要将我的数据存储到TStrings
集合中。如何将TIdTCPServer的多线串行数据传递给TIdTCPClient
当我传递多行字段时,我在客户端接收两个单独的数据项,而不是一个多行数据项!我也尝试过使用基于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] ='description。'
的Telnet结果:
其实,myData[2]
应该保持'Thom Smith'
与描述字段的第二行更换!并且在myData[2]
之后没有任何项目。 myData[3]
无法访问。
我想这个问题是关系到Indy的Write
或ReadStrings
程序,因为它发出ItemCount中为3,但它发出两个项目(一个正确的,接下来的喙两个项目!)。
如何将回车符传递给对方,而不将Write
程序中断myData[1]
分为两行?
非常感谢。
感谢您的建议,我需要发送Unicode字符串,您建议什么样的转义? –
@FarshadH - ZStream( http://docwiki.embarcadero.com/CodeExamples/XE5/en/ZLibCompressDecompress_(Delphi)),所以它会被压缩。从上面的选项 - 只是尝试所有的选项,看看会脚你。我最近使用了JCL选项,但它非常愚蠢,但至少在我的情况下工作。 –
非常有用,非常感谢... –