用TidTcpClient接收TidTcpServer发送来的数据,在客户端开线程,
现象是:
    服务器端发的数据,不能立刻触发客户端的接收
    将线程的调用写在客户端数据发送之后,可以立刻接收到回复,内容是先前服务器端发的    1、是否是用了readln(),已经放在线程里了,不会再阻塞了吧?
    2、线程在客户端数据发送之后调用,代码为
      readThread:=revthread.Create(true);
      readThread.FreeOnTerminate:=true;
      readThread.Priority := tpNormal;
      readThread.Resume;
    这样倒是能收到,确实上一次服务器发的,不能保证客户端及时接收是什么问题,请高手指点一二,多谢,在线等待中

解决方案 »

  1.   

    TidTcpClient/TidTcpServer没用过,都是用ServerSocket/ClientSocket的阻塞模式不会触发事件的,非阻塞模式才会触发事件表面上看readln是读取一行,既然是一行,就肯定有行结束符,如果没读到行结束符的话,应该是会阻塞在这儿的
      

  2.   

    1、客户端应该用线程,监控服务器端的回复数据,另外,只要连接建立,就可以由服务器端相客户端发送数据,触发机制没有错。
    2、按postren的提示,在发送端加入了'#13',问题依旧,不是readln()造成的程序阻塞。再网上挡了indy的DEMO,学习了里面的例程,改写后问题解决。
    主要改了客户端线程打开的位置,在连接网络时同时打开接收线程。另外,在线程处理函数
    Execute里,按DEMO中的例程加入了try...except 和while..do的保护代码,防止网络连接异常,问题解决。写出来希望对其他人也有帮助,可以结贴了。
      

  3.   

    ReadLn默认是加#13#10吧,试试这个,呵呵
      

  4.   

    Indy服务端本身就是阻塞多线程的,客户端不用新开线程啊!
    学习
      

  5.   

    indyTCP客户端控件连接到服务器端后,每个客户端连接线程要放到一个threadlist中,可以在连接的时候(也可以在连接成功后任何时候),服务器端自动(或手动)向全部(或某个)客户端连接线程发送数据,
    而客户端在连接成功后立刻开一个接受线程,不断读取接受信息,知道客户端关闭这样,无论服务器端和客户端怎么通讯都不会有问题