代码:
procedure TForm1.Button2Click(Sender: TObject);
var
  InputStream, OutputStream:TStringStream;
  SOutline:WideString;
begin
 with idTcpClient1 do
   begin
     connect;
         writeln('Ready');
         SOutline:= Readln;
         if SOutline='OK' then
           begin
             SOutline:='0800051000ClinLoginRequest';
             OutputStream := TStringStream.Create(SOutline);
             OpenWriteBuffer;
             WriteStream(OutputStream);
             CloseWriteBuffer;
             FreeAndNil(OutputStream);             InputStream:=TStringStream.Create('');
             if connected then
               ReadStream(InputStream,-1,true);
             RichEdit1.Lines.Add(InputStream.DataString);
             FreeAndNil(InputStream);             
           end;
     DisconnectSocket;
     Disconnect;
   end;indy9的memo中也只说了客户收或发,没一个完整的收发两个动作!
请高手指教!现在思路是这样的:
  客户端发一个数据流给服务端,服务端接收这个数据流后,分析这个数据并作处理,把处理后的数据
以数据流的方式发送给客户端,客户端接收数据后,显示给操作用户看!
现在是客户端收不数据,无法响应!

解决方案 »

  1.   

    改成这样试试:             SOutline:='0800051000ClinLoginRequest';
                 OutputStream := TStringStream.Create(SOutline);
                 InputStream:=TStringStream.Create('');
                 OpenWriteBuffer;
                 WriteStream(OutputStream);
                 ReadStream(InputStream,-1,true);
                 CloseWriteBuffer;
                 FreeAndNil(OutputStream);
                 RichEdit1.Lines.Add(InputStream.DataString);
                 FreeAndNil(InputStream);
      

  2.   

    我前一阵也遇到这个问题,通过看帮助终于弄明白了,其实是与WriteStream()和ReadStream()的参数有关,我简单说一下。WriteStream()有四个参数,第一个参数为数据流,第二个参数为boolean型,true代表从流的开始位置开始传输,而false代表从流的当前位置传输,默认为true。第三个参数也是boolean型,true代表标出传输的流的大小,而false为否。第四个参数为流的字节数大小。而ReadStream()有三个参数,第一个为数据流,第二个为数据大小,-1代表全部。第三个参数true表示只有在客户端disconnect后才能接到数据,而false表示客户端不必断开就可以接收到数据。你的问题就在这。可以有以下两种解决方法:
    1:
    客户端:
                 
    try
    begin
       OpenWriteBuffer;
       WriteStream(OutputStream);
       CloseWriteBuffer;
    finally
      disconnect;
    end;服务端:
      ReadStream(InputStream,-1,true);2:
    客户端:
       OpenWriteBuffer;
       WriteStream(OutputStream,true,true,outputstream.size);
       CloseWriteBuffer;服务端:
      ReadStream(InputStream,athread.connection.readinteger,false);
    其中athread.connection.readinteger存的是流的字节数大小。这样你就可参接到数据了。