摘要: 2010-04-07 00:16:34|分类: 网络开发 |标签: |字号大中小订阅 考虑到以后可能要用到服务器程序,如果没有现成的、稳定的代码,到时候可能会遇到麻烦。所以,最近一有空,就写服务器的框架代码。问题一:select模型如何得知连接中断?select模型只有三种套接字集合:发送、接收、异常。那么,怎么知道远程客户端中断了网络连接呢?跟踪调试发现,当远程客户端主动中断连接时,服务器接收到长度为0的数据包。这一点很好理解。因为TCP连接中断时,客户端和服务器会相互发送通知数据包。这个数据包没有内容,只有TCP/IP报头。所以,内容长度为0,这是可以理解的。于是,在接收到长度为0的数据包 阅读全文
posted @ 2011-12-13 17:54 oayx 阅读(1977) 评论(1) 推荐(0) 编辑
摘要: 之前的测试都是,手动强制关闭客户端进程,然后查看服务器的情况,结果往往是,服务器收到了客户端关闭的事件。其实,我一直忽略了一个问题,我没有拔掉网线来测试! 上面的手动关闭客户端进程,事实上并不能测试出想要的结果,因为进程是在应用层的,所以,这种测试方法不能保证网络驱动层也不发送数据报文给服务器。经过测试发现,当应用层强制结束进程时,对于TCP连接,驱动层会发送reset数据包!而服务器收到这个数据包就可以正常关闭了! 那么,如果拔掉网线呢,服务器收不到这个数据包,就会导致死连接存在! 所以,心跳包是必要的,或者使用TCP协议本身的Keep-alive来设置。 之所以产生前面的误解,也是由... 阅读全文
posted @ 2011-12-13 12:31 oayx 阅读(6602) 评论(1) 推荐(1) 编辑