关于indy10中的idtcpclient ( 积分: 100 )

  • 主题发起人 主题发起人 anndy1999
  • 开始时间 开始时间
A

anndy1999

Unregistered / Unconfirmed
GUEST, unregistred user!
向服务端发送消息:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient.Host := Edit1.Text;
IdTCPClient.Port := StrToInt(Edit2.Text);
try
IdTCPClient.Connect;
IdTCPClient.Socket.WriteLn(memo1.Text);
IdTCPClient.Disconnect;
except
showmessage('connect failed');
end;
end;
procedure TForm1.IdTCPClientConnected(Sender: TObject);
var
S: string;
begin
S := IdTCPClient.Socket.ReadLn('', 10);
// s:= IdTCPClient.Socket.ReadLn; //换成这句就死了,没响应
if S <> '' then ListBox.Items.Add('收到服务器消息: ' +s); //这儿接收不到返回的消息
end;

服务端是用C#写,是返回当前一个时间。服务端能接收到发出的消息。

还有一点的是,为何这边客户端发的中文的时候,服务端收到的全是?????
 
// s:= IdTCPClient.Socket.ReadLn; //换成这句就死了,没响应
不是死了 是被组塞了。等到收到消息才能解除组塞。

S := IdTCPClient.Socket.ReadLn('', 10);这个10是超时时间 当然是过了10ms没消息就退出 所以不会组塞
 
觉得Miros说的有道理,楼主试试
我来听课学习
 
//SResponse:=Tcpclient.ReadLn('',2000);
//当返回的数据以换行回车结尾时可以用这个readln。
SResponse := IdTCPClient1.ReadString(20);
//一直读直到读到一个字符为止,indy没有提供方法中断,必须保证发送的数据长度>=20,否则死锁

用readln要知道是用什么做结尾,你的那个问题我之前也遇到过,
 
后退
顶部