socket 断开后,要重启动程序才能连上,怎样解决? ( 积分: 50 )

  • 主题发起人 主题发起人 pbz
  • 开始时间 开始时间
P

pbz

Unregistered / Unconfirmed
GUEST, unregistred user!
自己做了一个客户端,连接远程的服务器端,为了在网络断开恢复后,能够自动连上,程序检测到socket->Active=false,救等待10分钟,然后动态创建一个socket,重新连接,但就是在这里无法连上,可是关闭程序,又可以连上?请问这是什么原因?要怎样解决?
服务器1分钟收不到心跳包就会断开.
 
socket 断开后 close 一下 看看。
我用api写socket时也发现过这个问题, 不过 closesocket 后就可以连接了。
 
不要说close了,就是动态再创建一个socket连接都不可以,可是重新启动程序就可以了.
我觉得可能是有些东西没有析放
请知道的人指教一下
 
socket断开,但还占用着端口,按zzutrain的方法试试,close应该会释放占用的端口,
 
刚刚做了测试,在联通的的时候,突然断开网线,然后再接上,还是连不上,关闭程序后再连就没有问题了还是老样子,有谁可以帮帮忙?

刚刚测试,在Ondisconnenction和OnError时间都增加了socket->Close
 
我用的機制和你一樣,但可以正常連接。
 
本公司诚聘软件工程师数名,要求大专以上学历,计算机专业,熟练掌握DELPHI+SQL编程,能开发C/S 或B/S结构的应用软件,二年以上工作经验,有在软件公司工作经验优先考虑。有意者请联系QQ419682853,邮箱:ljy42af@gdou.com
 
搞不懂

有无人遇到过相同问题,解决左的?

或者讲讲原理我知都好吧!
 
你用的是什么socket控件?我以前的程序也有过类似的情况,在多线程情况下,偶尔会有1个连接意外中断后,无法自动重连,但是重新启动即可。原因也没有找到,我当时使用的是INDY的TCP控件,感觉是INDY的bug。
最终解决办法是另外制作一个看门狗程序,主线程、socket线程、看门狗程序3者互相监督,当任何一个发现的异常,便会强行重启线程,问题解决。
 
不用搞得這麼麻煩吧,我也就是簡單的在發生網絡斷開時再重新連接,除了關閉一下SOCKET之外根本就沒有做任何處理,程序又可以正常連接上服務器。
建議把出錯的關鍵代碼貼出來,讓大家看看,我盡量抽空測試一下。
 
这个不是连接的问题 首先应该是连接断开的判断问题, indy对 异常的连接断开是检测不出来的,在就是 indy 用的是线成 阻塞 模式 ,在客户端最好做个数据监视线成 判断数据的到来,如果连接断开则从新启动连接 和创造线成 qq:729974631 ,
 
很久无上来,差点忘记了这个问题.
后来用socket api ,这个问题就无了.

不能重连,可能是delphi 封装得不好,导致其实无段开,服务器就认为你还在,不允许重连.
 
多人接受答案了。
 
后退
顶部