|
大家有没有碰到过客户终端采用GPRS(TCP)连接了服务器进行通讯,但有一段时间客户可能进入了地下室或者电梯里面或者信号屏蔽很厉害的大楼里面不出来,这时候服务器上该客户的连接还是存在的并且可以往下发送信息的,但这个信息到不了客户那里,而且服务器上WSASend函数也不会报错,有没有办法知道这时候服务器发送数据是失败的呢?
客户端会采用心跳的方式保持跟服务器的通讯线路,服务器会定期检查客户端最后通讯的时间,如果超出一定的时间(比如2~3个心跳时间间隔之后)的话说明这个客户端已经无法再次发送信息了,服务器会把它踢掉。但现在的问题是在这2~3个心跳间隔之内服务器要给客户端发送数据的话,服务器上看起来是发送成功了的(WSASend函数不会报错),但客户端确实是收不到的。有办法知道服务器下发的数据是否正常吗?
服务器采用的IOCP,除了让终端每接收一次服务器的信息都要有一个回执(也就是服务器检测发送超时没有回执回复)之外还有别的办法吗?操作系统在处理TCP信息的时候有这方面的错误吗?
TCP通讯是双向握手和重发的,上面我说的情形终端侧肯定掉线了,原则上说的话,服务器上应该发不下去信息的(因为对方的端口已经过期了,只是移动还未给T掉而已,所以服务器上还正常发信息)。
|
|