Server端会不定时的发送数据到客户端,要求客户端在数据发过来后及时地接收数据,而不是用Timer控件来控制。也就是说IdTCPClient有没有相应事件来触发?
我刚接触Indy,希望大家帮帮忙!
{我在Indy网站下载的demo也没找到我这种问题的范例}

解决方案 »

  1.   

    IdTCPClient是阻塞式的。比如调用IdTCPClient.readln时,indy会一直停在这读,直到读到数据或出现错误。
      

  2.   

    用IdTCPClient.readln时,如果没有数据传过来,它是一直在读,这样程序就停在那里不能操作了。有没有办法判断当有数据传过来再去readln。
      

  3.   

    一般来说,Client是用来往Server发送数据,不用于接收数据,如果硬要用Client去Readln,那可以用线程处理。
      我的做法是用Server-Server组件完成通讯。
      

  4.   

    lynmison(菻梓)的方法好象是解决你的问题的唯一办法!阻塞就这特色!
      

  5.   

    但是Server端是别人开发的,而且肯定不是用DELPHI
      

  6.   

    那别用IdTCPClient了! 阻塞的满足不了你的要求
      

  7.   

    IdTcpClient当然可以实现。
    创建一个线程,用于读取或发送数据。
    在线程中Execute中执行如下代码:
    While ( Not Terminated ) do
    begin
      Try
        Socket.ReadBuffer(..);
        Synchronize(ProcessRequest); //在这里处理服务端送过来的请求
      Finally
      end;
    end;
      

  8.   

    在delphi3下的TCP控件可以连接,并能发送和接收数据。可用delphi7的INDY控件能连接,但发送数据后Server端提示“无效数据”,可发送的字符串是和TCP控件发送的字符串是一样的。为什么?
      

  9.   

    indy的例子里已经写得很清楚了啊,用一个线程来控制,完全可以实现.