tcp 杂记

news/2024/5/17 18:20:35 标签: socket, tcp, udp, ReuseAddress, bind

1、bind的作用。
tcp中, 表明要绑定到哪个端口和ip,bind函数中需要指定Ip和port。下面是tcp中server端和client端的bind的作用
在server端,是必须要进行bind的,一定需要指定server使用哪个端口。ip可以设置为0.0.0.0(Any),表示去监听电脑上的任意的网卡或者network adapter 。 
在client端,可以bind,但是尽量不要bind。client端connect时,如果未bind,会自己默认绑定一个有效的ip和port。

udp中, 哪方需要接收数据,哪方就需要bind,同样的,对于接收方可以设置ip 为0.0.0.0(Any),表示接收任意的网卡或adapter 的数据包。

不管是tcp还是udpbind后,如果bind了ip为0.0.0.0,对于发送方,实际发送时会默认选择一个有效ip作为数据包的源。


需要注意,如果bind的ip和port在当前操作系统中的现有的tcp链接中存在,则会失败。

wireshark抓取本机数据包(包括回环地址),需要进行特殊设置:https://blog.csdn.net/readiay/article/details/53063932

2、m_clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //c# code
根据tcp 状态图:https://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 可以了解到TIME_WAIT是正常关闭socket时,tcp链接会进入的一个状态,所有正常关闭socket会维持这个状态2MSL,一个MSL根据系统而定,默认可能是30ms、1min、2min。(注意,状态图描述的是tcp链接,而不是单指端口或者ip,或者两者的组合组合)
https://blog.csdn.net/yhcs1213/article/details/48293577 ,这个地址描述了如何取巧的让tcp链接不进入TIME_WAIT 状态, 但是这应该是不安全的,也不是主流,也不是推荐的。 
tcp中的SOL_SOCKET 一个选项SO_REUSEADDR .描述的是是否允许端口在TIME_WAIT 状态时重用地址(ip+port)。如果不设置该值,则在bind的时候就会失败。

3、在一个电脑上进行服务端和客户端测试,设置了SO_REUSEADDR,但是connect的时候有时候会失败,失败后需要在一两分钟才能再次connect成功。找到原因是因为同样的tcp链接的描述在现有的链接中以存在,处于TIME_WAIT状态。虽然两端都进行了bind,并且两端都有设置SO_REUSEADDR。可能操作系统中一个tcp链接由两端的ip和端口组成的四元组来描述。如果查表时,发现同样顺序的四元组,就会返回fail。破解方式是,client端不进行bind

4、socket 在close后必须要重新createsocket。serversocket 让阻塞中的accpet函数退出,需要调用close,close后也必需要 重新createsocket


http://www.niftyadmin.cn/n/1150192.html

相关文章

Speex手册----Speex 简介

没搜到Speex相关的中文资料,所以想将Speex的英文手册中会用到的部分翻译出来。Speex官网:http://speex.org/ 可以再Documentation下找到PDF版或HTML OL版的英文手册。每段我都会付上英文原段落,可能会由于英文技能的匮乏或语音解码领域的不熟…

unigine lookAt

unigine中存在如下两个函数。 mat4 lookAt(vec3 position, vec3 target, vec3 up) dmat4 lookAt(dvec3 position, dvec3 target, vec3 up) 该函数求取相机的modelview ,相机的modelview 与相机的变换矩阵transform刚好互逆。所以求取相机的变换矩阵应该是 tranf…

[PAL编程规范]SAP HANA PAL逻辑回归预测分析Logistic Regression编程规范FORECASTWITHLOGISTICR(预测)...

1. 生成规范 CALL SYSTEM.AFL_WRAPPER_GENERATOR( <procedure name> ,AFLPAL, FORECASTWITHLOGISTICR , <signature table>); 其中signature表应该具有的记录&#xff1a; 2. 调用方式 CALL <procedure name> ( < data input table>, <paramete…

unigine NodeReference

测试使用unigine版本 Unigine2.3.1 Unigine NodeReference是内部类&#xff0c; 用于导入unigine特有的内部的node文件。 用NodeReference添加节点后&#xff0c;经常可能会出现 删除节点失败的现象。 如下为我的node 文件结构 node Reference导入后&#xff0c;产生一个通过…

前置++/--和后置++/--

对此一直理解不深,今日偶然之间发现自己根本没有理解他们.今天我发现:cout<<a<<endl;cout<<a<<endl;的值不同,a返回的是原值,a返回的是递加后的值.我不禁冒了冷汗,写了这么多代码,居然会不明白这么简单的东西,还好之前代码没有出现问题.我为此懊恼不已…

unigine anim动画 相互影响问题

使用版本unigine2.3.1 unigine中对objectskinnedmesh 设置anim动画&#xff0c;如果使用同一个node 对象&#xff0c;会发现动画乱串&#xff08;此处应该为一个bug&#xff09;&#xff0c;如a,b两实由同一个node文件创建&#xff0c;设置a的anim&#xff0c;会导致b也运动起…

方便面为什么是弯的而不是直的?其实它也很无奈

2019独角兽企业重金招聘Python工程师标准>>> 方便面为什么是弯的而不是直的&#xff1f;其实它也很无奈 喜欢方便面的人&#xff0c;对于方便面的热爱根本停不下来。 喜欢方便面的人&#xff0c;对于方便面的热爱根本停不下来。 作为一个时髦的现代人&#xff0c;我…

vs 下可用的 shader 调试工具

1、gpa 2、nsight 3、microsoft的 graphic debugging