TIdTCPServer数据传输问题,高手请进。看看是不是bug(100分)

  • 主题发起人 主题发起人 dongliang110
  • 开始时间 开始时间
D

dongliang110

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在做一个通讯程序,在测试的过程中出现了一些问题,也不知是不是indy的bug,
哪位知道请赐教,
1、当客户端同消息服务器正常连接,发送数据双方都可以正常接收,如果客户端
正常断开服务器连接,TIdTCPServer可以判断该连接断开,如果我将客户端机器的网线突然拔掉,

这时TIdTCPServer不能检测到此客户端已断开,显示正常连接,这个问题倒还可以用户其它方法检

测。最重要的是下面的问题
2、当客户端同消息服务器正常连接,在客户端没有退出情况下这时我将消息服务器断开,也就是

IdTCPServer.active=false;这时消息服务器会报出错误:Terminate Thread TimeOut,我查看了一

下server.Threads.LockList.Count服务器中线程数量,还是客户端的连接数量,并没有关掉,想

尽了办法也不能解决,
我估计这有可能是个bug,要不就是我在控件使用方法上有问题。在服务器端TIdTCPServer控件究

竟要和哪几个控件配合使用。还有IdServerIOHandlerSocket这个控件的功能和使用方法。
下面的是我的连接代码:
Server.DefaultPort:=strtoint(Edit1.Text);
if CBServerActive.Checked=false then
begin
ListBox1.Items.Clear;
end;
Server.Active := CBServerActive.Checked;
 
怎么没人回答?
 
哪位大侠指点一下,分不够可以再送,我这个问题很急
 
很简单啊
关闭前扫描线程server.Threads.LockList.Count
Threads.stop
或者采用
AThread.Disconnect;关闭连接对话
 
不行的,用线程查看工具查看,其实线程并没有关掉
 
99。9%应该是程序问题。我用indy做了大量的服务端客户端。
 
to Laagee 请问一下,在服务端TIdTCPServer控件要和哪个控件配合使用。
在将TIdTCPServer.active=false 前堓要做什么工作。能给出一个例子吗?
 
估计是你的服务线程设计得有问题,OnExecute没有结束,那里不需要做成死循环,indy的线程管理会自动循环调用它,如果一定要做成了死循环,就要自己来判断该什么时候退出了。
 
你在网上查找一下,应该有你想要的问题.
我在网上看过类似的程序.你的问题不光是这个控件使用的问题.还有一些控件配合在一起才行.
 
第二个问题我已经解决了,只是第一个问题还想好怎么解决,这种方式断开连接时,服务器端还是连接状态,发送数据没有报错。这个怎么解决。
 
能讲讲第二个问题的解决方法吗?
 
后退
顶部