大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
php是脚本语言,估计无法实现你这个愿望。
我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、勐海ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的勐海网站制作公司
以前的高手是通过CGI来实现的,就是因为CGI是应用程序,安全性不好,所以后来才流行PHP这类脚本语言的(就好像以前电脑上都是administrator,现在都是用户自己的账户了一样)。
与设备发送数据的程序编写人协调,在发送的数据前面添加一个标识设备ID的内容,这样接收数据后从数据判断设备号,而不是通过IP和PORT。
例如约定用两位数表示设备ID,那么设备01发送的数据是AAAAA修改为发送01AAAAA,收到数据后识别01为设备号,后面的AAAAA作为数据。
传输层将UDP包(段)发给网络层;网络层会将其封装成IP数据包,再将IP包发给数据链路层;数据链路层将IP包封装成帧,将帧发给物理层;物理层将帧转化为二进制比特流,通过介质发出。
UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES)
TCP 包的大小就应该是 1492 - IP头(20) - TCP头(20) = 1452(BYTES)
目前大多数的路由设备的MTU都为1500
我对上面的理解是:如果我们定义的TCP和UDP包小于1452,1464,那么我们的包在IP层就不用分包了,这样传输过程中就避免了在IP层组包发生的错误。如果使用UDP协议,如果IP层组包发生错误,那么包就会被丢弃,UDP不保证可靠传输。但是TCP发生组包错误时,该包会被重传,保证可靠传输。所以,我们在用Socket编程时,包的大小设定不一定非要小于1400,UDP协议要求包小于64K,TCP没有限定。
总结:
我们设定包的大小对于UDP和TCP协议是不同的,关键是看系统性能和网络性能,网络是状态很好的局域网,那么UDP包分大点,提高系统的性能。不好,就分小于1464,这样可以减低丢包率。对于TCP来说,这个就要靠经验了,因为,TCP丢包可以自动重传,分大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统性能又降低了
tcp/ip
解决c++udp组播通信由于多网口造成无法发送数据包的问题
赖东东_
原创
关注
1点赞·1182人阅读
一、分析
什么叫做多网口?
使用ifconfig命令查看接口信息,如果只有eth0,说明你只有一个接口,那么udp无法发送数据包就不是因为多网口的问题了,那你就要去找其他原因
如果除了eth0还有eth1等接口时,就说明你的设备是多网口的
怎么判断是因为多个网口造成无法发送数据包?
1.首先,确定其他客户端能发送数据包到组播
通过打印数据和抓包就可以确定
2.本端能确定发送成功数据,但是通过组播地址抓包却无法抓到
通过在 发送数据函数接口内 打印发送的数据发现数据成功打印
在设备端(一般为开发板)检查网络状态,输出指令netstat -napu
可以看到 本地地址 local adress的ip地址为0.0.0.0
因为存在多个网口,每个网口都有它的ip地址和路由,所以当你查看你的设备网络状态的时候,就会发现你的地址是0.0.0.0
这个0.0.0.0地址是本地所有ip地址的一种表示地址。
所以,出现 确定发送了数据,无法抓包,网络状态显示ip为0.0.0.0,基本可以确定为是因为多网口的原因造成了数据包无法到达,因为一般的代码而言,都是固定一个从一个ip地址去到组播地址。而多网口的时候,路由会自动帮你选个最佳ip地址去往组播地址,但这个最佳的ip地址和你代码中设定的本地地址不一定一样,故你无法抓包,但却实是发送了数据
二、解决办法
根据以上总结,你大概就有了思路,既然我无法确定默认路由给的是哪条路去往组播地址,那我只要把所有的本地地址都发送一遍,总有一个被默认路由选中的路径去往组播地址
以下是让数据在所有本地地址都发送的一个例子,大家可以根据实际情况,只要向着上面的思路去写代码就可以解决这个问题
/