我用serversocket的线程模式做一个服务器端程序,但是这程序还需要向每一个客户端发送信息数据。但是我遇到的情况是,当服务器端发送给客户端数据的时候,此时客户端已经掉线了,但是这时候服务器端的send发送函数还是返回发送数据的字节数,而不是直接返回错误代码或触发异常,大概要等几分钟,这时候这个socket才关闭。
我的意思是,有没有更好的办法,就是在服务端send发送数据的时候,如果对方吊线了,就立即直接返回错误或者触发异常,也就是立即就知道是否发送成功了?有没有这样的办法呀??send函数在对方吊线了,为什么还是返回还是发送数据的字节数,为什么不返回0字节呢??这是为什么??
我的意思是,有没有更好的办法,就是在服务端send发送数据的时候,如果对方吊线了,就立即直接返回错误或者触发异常,也就是立即就知道是否发送成功了?有没有这样的办法呀??send函数在对方吊线了,为什么还是返回还是发送数据的字节数,为什么不返回0字节呢??这是为什么??
解决方案 »
- TRichEdit 中 如何 把RVPrintPreview RichViewEdit 连接起来
- 哪位高手试过用delphi创建sqlite内存数据库和表的
- OPENDATASOURCE 程序片段运行出错请指点
- Grid++Report 的注册码有吗,给我个谢谢!!!我这里怎么fastreport装不起来!
- 一个捡分的问题,进来看看
- 急求线程高手,裸体跪求!
- 有关存储过程中返回记录集
- 请问要要彻底销毁一个窗体是用哪一个函数啊?
- 为什么出现这个提示?“name”is not recognized optimizer lock hints
- 又一个抢分问题,能者不难,难者不能,谁告诉我怎么存入和读取数据库的备注字段?
- 有段代码请给看看?谢谢!
- 怎样获得指定进程的线程数,并且得到各线程的状态?
服务器端在send的时候并不知道客户端掉线,所以会将数据发出去,然后经过路由如果客户端吊线
服务器端是收不到回应的,所以约1分钟后,服务器超时,确认已经掉线
可以改善的方式是修改超时时间,尽早返回错误,但是这种情况下send是不会失败的
udp的send总是成功的
tcpserver send失败除非客户端已经请求连接关闭,或服务器端把连接关了,如果用控件也几乎不会有这问题
这是tcp/ip协议上无法处理的,所以不论那种编程语言都不能,即不是程序问题也不是api问题
你说的,“如果用控件也几乎不会有这问题”这句话是什么意思??
我用setsockopt函数将发送超时改为1秒钟,然后对方网线拔掉,这时还继续send发送数据,结果还是返回数据的字节数,好像还是发送成功。这是怎么回事?是不是这种方式就无法解决了。