J jangill Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #1 我作了socket的通信程序, 我想捕获客户端断开网络连接时的错误异常情况, 怎么做呢?
L luoshibao1985 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #4 socket通信程序要捕获客户端断开连接时错误异常情况不是很好弄的,我是新手,在这方面我也不是很了解,socket服务端只是在等待socket客户端的连接,如果客户端断开,服务端就得不到客户端的信号。要解决这个问题,我个人的想法是通过服务端在指定时间间隔发送一条信息给客户端,如果客户端在线的话客户端程序就返回一个特定的值,说明客户端在线,如果在等待一定时间,没有返回信息就说明客户端网络断开。还有,客户端的关闭时向服务端发送一条信息用与说明客户端断开,然后在socket服务端的显示的用户列表中将其删除。 说得不好,不要见怪,纯属个人关点。
socket通信程序要捕获客户端断开连接时错误异常情况不是很好弄的,我是新手,在这方面我也不是很了解,socket服务端只是在等待socket客户端的连接,如果客户端断开,服务端就得不到客户端的信号。要解决这个问题,我个人的想法是通过服务端在指定时间间隔发送一条信息给客户端,如果客户端在线的话客户端程序就返回一个特定的值,说明客户端在线,如果在等待一定时间,没有返回信息就说明客户端网络断开。还有,客户端的关闭时向服务端发送一条信息用与说明客户端断开,然后在socket服务端的显示的用户列表中将其删除。 说得不好,不要见怪,纯属个人关点。
J jfyes Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #5 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3402998 http://www.delphibbs.com/delphibbs/dispq.asp?lid=2651464
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3402998 http://www.delphibbs.com/delphibbs/dispq.asp?lid=2651464
J jangill Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #6 to luoshibao1985:你的话很有见地, 你的办法不错, 我可以采纳,试一下。 我想 ServerSocket的错误异常事件(OnError)中捕获的应该是服务器端的错误情况,在客户端的ClientSocket的错误异常事件中捕获的应该是客户端的错误情况,如果真是这样,我们就无能为力了。 难道Borland的Socket控件就是这样处理的吗?我还是不放弃。
to luoshibao1985:你的话很有见地, 你的办法不错, 我可以采纳,试一下。 我想 ServerSocket的错误异常事件(OnError)中捕获的应该是服务器端的错误情况,在客户端的ClientSocket的错误异常事件中捕获的应该是客户端的错误情况,如果真是这样,我们就无能为力了。 难道Borland的Socket控件就是这样处理的吗?我还是不放弃。
X xfeiffer Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #7 这样解决真的有效吗?碰见这个问题很久了,我也试试。
J jfyes Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #8 上面Indy组件实现我做过试验,应该可以,TServerSocket没试, 它用的是Winsock1,就该差不多,到底层Socket都是一样的。
F fxh7622 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #9 设置每一个套接字的KEEPALIVE属性,就可以了!
I iswear321 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-10 #10 呵呵,定时发心跳,不是一个好办法,会增加服务器和带宽的压力,所以最好的办法就是自己做超时检测。
Y yj_119 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-11 #11 iphlpapi.dll中有相应的函数,你可以查查,效果不错的
X xfeiffer Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-11 #12 Delphi7下如何安装WinSock2??? WinSock不支持WSAIoctl! Delphi7安装目录下有个IdWinSock2,这个是不是一样的?
I iswear321 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-11 #13 不是的,去JEDI上找一个吧。 winsock2.pas
J jangill Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-12 #14 问题已经解决了.大家到http://www.delphibbs.com/delphibbs/dispq.asp?lid=2651464 看一下就知道答案了.LeeChange的第二个方法, 不错. to xfeiffer: 使用Tserversocket 和 TClientSocket控件时, 要引用单元idwinsock2.pas. 位于delphi安装目录下的indy文件夹下.是一样的, 我试用了.成功了.
问题已经解决了.大家到http://www.delphibbs.com/delphibbs/dispq.asp?lid=2651464 看一下就知道答案了.LeeChange的第二个方法, 不错. to xfeiffer: 使用Tserversocket 和 TClientSocket控件时, 要引用单元idwinsock2.pas. 位于delphi安装目录下的indy文件夹下.是一样的, 我试用了.成功了.