procedure TMainFrm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
 SOutline:WideString;
 OutputStream:TStringStream;
begin
 with AThread.Connection do
   begin
      SOutline:='0800051000ClinLoginRequest';
      OutputStream := TStringStream.Create(SOutline);
      OpenWriteBuffer;
      WriteStream(OutputStream);
      CloseWriteBuffer;
      FreeAndNil(OutputStream);
      Disconnect;
   end;
end;procedure TMainFrm.Button1Click(Sender: TObject);
var
  InputStream:TStringStream;
  YWString:WideString;
begin
  with idTcpClient1 do
   begin
     connect;
     while connected do
       ReadStream(InputStream,-1,true);
     SetLength(YWString, InputStream.Size);
     InputStream.Read(YWString[1], InputStream.Size);
     FreeAndNil(InputStream);
     RichEdit1.Lines.Add(YWString);
     DisconnectSocket; 
     Disconnect;
   end;
end;上面就是代码,idTcpServer与idTcpClient都已设置好属性,能连通,但采用上面的代码就出错!
控件采用INDY 9.0

解决方案 »

  1.   

    while connected do
           ReadStream(InputStream,-1,true);
    这句要它干嘛?
      

  2.   

    with idTcpClient1 do
       begin
         connect; //之后最好有个延迟,调用Connect后并不一定立刻连通
         while connected do
           ReadStream(InputStream,-1,true);
         SetLength(YWString, InputStream.Size);
         InputStream.Read(YWString[1], InputStream.Size);
         FreeAndNil(InputStream);
         RichEdit1.Lines.Add(YWString);
         DisconnectSocket;  //Disconnect考虑去掉,毕竟上面的Execute中已经有Disconnect了
         Disconnect;
       end;
      

  3.   

    To: suhang888(冬雨) 
      如你所说,不要服务端的 Disconnect那客户端断开时将报错!To: SuanAddMiao(算苗)
     while connected do
       ReadStream(InputStream,-1,true);
    不要这句,无法读取数据流。
    也试过只用ReadStream(InputStream,-1,true); 但还是达不到效果!To: zzllabc(抱朴子--清心释累,绝率忘情) 
    在connect后延迟也没用!
    删不删除DisconnectSocket;这句无关要紧!问题不在这句上!
    而在
    while connected do
       ReadStream(InputStream,-1,true);
      

  4.   

    while connected do
       ReadStream(InputStream,-1,true)
    这句是错误的,建议用
    if connected then
       ReadStream(InputStream,-1,true);
      

  5.   

    解决了吗?
    点击菜单"tools"-->"debugger options"的标签Language exceptions,点击add 输入:
    eidconnclosedgracefully 然后点击按钮"ok"就可以了!加分吧!~Q~
      

  6.   

    To:  2312(╰@oo恒星★) 
    这样的操作起什么作用?
      

  7.   

    解决报"Connection Closed Gracefully"的错误提示呀!
    还有IndyDemos里面的TCPStreamClientServer我刚才看了,运行完全没有问题呀!