AContext.Connection.Socket.ReadLn 读数据的有关问题
AContext.Connection.Socket.ReadLn 读数据的问题
客户端(C#)由socket发来一个字符串形式的XML
<?xml version= "1.0 " encoding= "utf-8 " ?>
<Message>
<head desc= "test "/>
<Query>
<name> prime </>
<sex> male </sex>
<duty> manager </duty>
</Query>
</Message>
服务器端用在Indy10中(delphi2007)的TIdTCPServer接收
procedure TForm.IdServerExecute(AContext: TIdContext);
var sFile:TFileStream;FileSize,i:integer;s:string;sl:TStringList;str:TStrings;
tbs:TBytes; buf: TBytes;
begin
try
s := AContext.Connection.Socket.ReadLn;//========
s := StringReplace(s, ' ', ' ',[rfReplaceAll]);
if s <> ' ' then
sTel := sTel + s
else
Memo1.text := '收到消息串为 '+sTel;
except
end;
但是程序在读最后一行, </Message> 的时候Socket.ReadLn 这句就没反应了,
程序也没死机,请问怎么才能正确读到那个串呢
------解决方案--------------------
我觉得好像是这样:
接收:AContext.Connection.Socket.ReadLn
发送就要 :
Socket.WriteLn
一定要配对才行
如果你的C#客户端不是这么写的,那就用AContext.Connection.Socket.InputBufferAsString
------解决方案--------------------
没反应是在等待接收数据,你可以设置读取超时。
客户端(C#)由socket发来一个字符串形式的XML
<?xml version= "1.0 " encoding= "utf-8 " ?>
<Message>
<head desc= "test "/>
<Query>
<name> prime </>
<sex> male </sex>
<duty> manager </duty>
</Query>
</Message>
服务器端用在Indy10中(delphi2007)的TIdTCPServer接收
procedure TForm.IdServerExecute(AContext: TIdContext);
var sFile:TFileStream;FileSize,i:integer;s:string;sl:TStringList;str:TStrings;
tbs:TBytes; buf: TBytes;
begin
try
s := AContext.Connection.Socket.ReadLn;//========
s := StringReplace(s, ' ', ' ',[rfReplaceAll]);
if s <> ' ' then
sTel := sTel + s
else
Memo1.text := '收到消息串为 '+sTel;
except
end;
但是程序在读最后一行, </Message> 的时候Socket.ReadLn 这句就没反应了,
程序也没死机,请问怎么才能正确读到那个串呢
------解决方案--------------------
我觉得好像是这样:
接收:AContext.Connection.Socket.ReadLn
发送就要 :
Socket.WriteLn
一定要配对才行
如果你的C#客户端不是这么写的,那就用AContext.Connection.Socket.InputBufferAsString
------解决方案--------------------
没反应是在等待接收数据,你可以设置读取超时。