1、请问IdTCPServer如何段开和客户端的连接,现在有我写了一个SERVER端和一Client端程序,当Client先段开与SERVER的连接,SERVER再停掉服务没有问题,但是当Client没有段开连接而SERVER直接关闭服务就会报异常,我想在关闭SERVER前先关掉所有客户端的连接,试了很长时间都没有成功,请问怎么解决。SERVER用的是IdTCPServer,Client用的是IdTCPClient控件。2、还有一个小问题,IdTCPServer好象本身就是多线程的,我是不是就不用在为每个连接写个线程了,我看到一些文章提到要用线程池,它是做什么用的,怎么用,为什么用,不用行不行,(第一个问题是最最急的,请先帮我解决第一个,多谢多谢。)。
1 当时查资料时说是服务器先关闭时确实回出现异常,也有人说这是INDY的一个BUG。不过没查到解决办法。
2 INDY本身就是多线程的,它有一个监听线程专门负责监听来自客户端的请求,并为每个客户端建立一个服务线程,
楼上的方法在server正常退出的时候可能还有效,万一它异常退出呢,那还来的急发东东吗?
收到这个(特定命令),就给IdTCPClient发送关闭命令。
收到这个(特定命令),就给IdTCPClient发送关闭命令。
///////////
楼主,你可能没有明白最后是IdTCPServer发送给IdTCPClient一个关闭命令,是让IdTCPClient它先关闭,明白吗客户端try 一下,如果没有返回消息,则再关闭服务端你不是,就要这样的功能的吗
**************************************
呵呵,你说对了,IdTCPClient就是这样接收的。其实之所以出错,是线程不能正常退出的原因。而INDY是阻塞的,服务器端的readln是线程里的代码,又一直停在那里,服务器直接退出的话,线程不能正常退出,所以出错。
所以,在server的线程里接收,要先判断线程是不是退出或连接是否成功,即
while not terminate or IdTCPClient.Connected=ture do
begin
//接收代码
end;楼主要好好研究一下线程的东西。