用TidTcpClient接收TidTcpServer发送来的数据,在客户端开线程,
现象是:
服务器端发的数据,不能立刻触发客户端的接收
将线程的调用写在客户端数据发送之后,可以立刻接收到回复,内容是先前服务器端发的 1、是否是用了readln(),已经放在线程里了,不会再阻塞了吧?
2、线程在客户端数据发送之后调用,代码为
readThread:=revthread.Create(true);
readThread.FreeOnTerminate:=true;
readThread.Priority := tpNormal;
readThread.Resume;
这样倒是能收到,确实上一次服务器发的,不能保证客户端及时接收是什么问题,请高手指点一二,多谢,在线等待中
现象是:
服务器端发的数据,不能立刻触发客户端的接收
将线程的调用写在客户端数据发送之后,可以立刻接收到回复,内容是先前服务器端发的 1、是否是用了readln(),已经放在线程里了,不会再阻塞了吧?
2、线程在客户端数据发送之后调用,代码为
readThread:=revthread.Create(true);
readThread.FreeOnTerminate:=true;
readThread.Priority := tpNormal;
readThread.Resume;
这样倒是能收到,确实上一次服务器发的,不能保证客户端及时接收是什么问题,请高手指点一二,多谢,在线等待中
2、按postren的提示,在发送端加入了'#13',问题依旧,不是readln()造成的程序阻塞。再网上挡了indy的DEMO,学习了里面的例程,改写后问题解决。
主要改了客户端线程打开的位置,在连接网络时同时打开接收线程。另外,在线程处理函数
Execute里,按DEMO中的例程加入了try...except 和while..do的保护代码,防止网络连接异常,问题解决。写出来希望对其他人也有帮助,可以结贴了。
学习
而客户端在连接成功后立刻开一个接受线程,不断读取接受信息,知道客户端关闭这样,无论服务器端和客户端怎么通讯都不会有问题