为什么我的IdTCPServer接收数据不是阻塞式呢?函数:IdTCPServer1Execute(AThread: TIdPeerThread);里不管有没有数据接收都不停的运行.是不是哪边需要设置一下,非常感谢!

解决方案 »

  1.   

    晕,没人知道?以前在CSDN看到过,现在找不到了。
      

  2.   

    Indy是阻塞式(Blocking)的
    当你使用Winsock开发网络应用程序时,从Socket中读取数据或者向Socket写入数据都是异步发生的,这样就不会阻断程序中其它代码的执行。在收到数据时,Winsock会向应用程序发送相应的消息。这种访问方式被称作非阻塞式连接,它要求你对事件作出响应,设置状态机,并通常还需要一个等待循环。
      

  3.   

    IdTCPServer接收是在线程环境里执行的并且是以阻塞的方式运行的。
    你说的“不管有没有数据接收都不停的运行”,可能是其它的一些程序向你的IdTCPServer发送的信息,所以
    你在IdTCPServer.OnExecute事件里,要对接收的信息加以验证,不是你要的信息就丢包(Exit)就行了
      

  4.   

    :)简单的说就是,线程一直试着去作某一件事件(比方说:TidTcpServer读一段数据操作),如何没有成功线程一般采取这样的方式
    while not (事件作好) do
    begin
      等待一段时间(Sleep(...),当然也可能不等待);
      试着再作
    end;作为一个健状态的程序(象TCP/IP协议就是这样),一般都还有一个监控程序,去看看时间是否超过了,如果超时,也会写想应的超时标识,
    然后退出,大概的模型
    如下:
    while not (事件作好) and (时间还没有到) do
    begin
      等待一段时间(Sleep(...),当然也可能不等待);
      试着再作
    end;
      

  5.   

    IdTCPServer1Execute(AThread: TIdPeerThread);里不管有没有数据接收都不停的运行. 这才是我的问题。请看清楚问题。INDY demo 里的TCP Chat 就是有数据才触发的。