首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hello World:网络编程5

"Hello World"

接下来总结关于连接中断的,其中包括TIME_WAIT、关闭连接的方式、异常关闭的情况。然后在下一次的总结中,把之前讲述的内容,再补充一些内容,不如当调用connect()的时候会发生什么,什么是端口,ip地址各种其他的内容。

写到现在,已经是第六次了,虽然上一次是一张路线图。现在看来这个做法确实挺好的,我有越来越多的想法想去尝试实现它,编程更编程了一样乐趣,即使做点小玩意也能很开心。当我让同学在他电脑运行ChatMe的程序,然后当我看到我们的聊天信息,能够进行传输,出现在双方显示屏上的时候,心里还是挺满足的。当时是一个基于C/S的聊天室程序,之后想再试着做一做p2p模式的小型的聊天软件哈哈。不说废话了,开始总结了。

不知道你们有没有试过,当服务器跟一个客户正在连接时,你将服务器给终止了,然后再马上重新启动的时候,会出现“bind error:Address already in use”的错误。记得在我第一次学习网络编程的时候,忘记是大一还是大二了,当时是用python进行网络编程,突然就遇到这么一个错误,顿时束手无策,我也不知道怎么回事,过了一段时候后,他又可以正常运行了,后来越学越费劲。我还记得当时学的时候,书上有一句话说的是,“虽然这两个程序是在本机环境下通信,但是理论下是可以在不同主机上进行通信的”,于是兴奋的跟舍友借来一部电脑,然后运行它,如果你也试着这么做过,应该会跟我一样出现“connect error”,在各种网上求问中无果后,顿时就是去所有的兴趣,当时认识的人中也没有一个可以解答的人。现在看来,我猜当时出现connect error的原因大概是因为防火墙或者Nat转换的原因,当时完全没有学过任何东西,拿到书就开始跟着来学,那段时间看过好多书,不过都只学到零零碎碎的知识点,后来也很奇怪,我也忘记是因为什么,好像就找到了一根蜘蛛丝,然后把他们给串了起来,最后就重新拿起书学习了。话说回来,自学真的挺累的,不过当你发现自己跟以前比起来,懂了不少东西之后,确实挺满足的。

不知不觉又扯了好多无用的东西,感觉越来越不像是写笔记了。以后还是利用分割线把笔记跟唠嗑内容分开来好了,也有助于自己以后再回头看总结的时候,能直接看到总结的知识点。

关于TIME_WAIT状态,我想总结的内容主要是:

1做什么用的

2怎么触发

3怎么避免

TIME_WAIT的作用

TIME_WAIT会持续一小段时间,在这个时间内,源地址端口不可以被使用。这样做的目的是为了,保证在你关闭程序后,使网络中原先建立的通信的数据包完全消失,以至于不影响你下一次建立连接时候的通信。当对处于TIME_WAIT状态的地址调用bind()的时候,会被禁止,便会出现“Address already in use”错误。

TIME_WAIT触发

与其说是怎么触发TIME_WAIT状态,不如说是,谁会触发TIME_WAIT状态。客户?服务器?其实TIME_WAIT状态的触发是由主动执行关闭的一方触发,这里面有两种情况,我一一总结,其中涉及TCP终止连接的四步握手问题,这在之后的TCP编程部分的总结中在说好了,现在我就避免时候具体的东西进行解释好了。首先先说一下,下面提到的几种状态,包括

lESTABLISHED

2FIN_WAIT1

3FIN_WAIT2

4TIME_WAIT

5CLOSING

6CLOSE_WAIT

7LAST_ACK

8CLOSED

当双方进行正常通信的时候,他们所处的状态成为ESTABLISHED。

第一种情况,这种情况是双方有一方发起结束聊天的信号时,发生的事情。

第二种情况是双方同时发起结束聊天的信号时发生的事情,这种比较少见,毕竟太默契了。

TIME_WAIT的避免

一般没有特别的事情,是不建议跳过TIME_WAIT状态,它可以帮助我们建立正常的通信。当然要想跳过他或者忽略它也是可以的,比如设置套接字选项的SO_LINGER的值,设置SO_REUSEADDR。

好了,这次就先总结TIME_WAIT状态了,保持总结的笔记在1000字左右,这样看我笔记的人也不会很累。下次总结关闭连接的方式跟异常关闭的几种情况。再接下来就是对之前所说的内容的细节补充。

2018.01.28

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0H4QX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券