TCP/UDP的接收包方式
2024-09-29 08:35:16
UDP
udp不是流式的,每次接收一个包,长度不超过(65535-28,总包长65535字节,包头28字节)。所以UDP方式下不需要填写任何参数直接调用 $client->recv() 即可。注意如果填写了接收长度,但实际接收到的包超过此长度,那么超过的部分将会被丢弃。
如果Server端是分包发送的,那么调用成需要加while循环来接收,调用端确定接收完毕或者发生超时时退出。
TCP
TCP是流式的,只要有数据就可以一直接收。一般有2种用法。
1、不确定包长度
循环接收,调用端判断是否每个包结尾是否有包结束符,有时或者超时时退出。
2、确定包长度
一般协议都是包头+包体,包头中有包的长度值。
先调用一次 $client->recv(包头长度) ,然后包头后拿出包长度值再 $client->recv(包长度-包头长度, 1). 就可以接收到整个包,如果发生超时表示调用失败。
最新文章
- 汇编语言进阶和Makefile进阶---第二天
- shell脚本处理大数据系列之(一)方法小结
- Error:/etc/fstab:Read-only file system错误的解决办法
- margin的BUG(2)
- c#equals相关
- MVC模式下xml文件的解析
- C#邮件收发
- HDU - 2502 Subway
- Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3)(A.B.C,3道暴力题,C可二分求解)
- 简单实现ASP.Net MVC网页播放音乐
- day 15 - 2 内置函数练习
- 【转】Windons+jenkins,构建java程序,提示C:\Windows\TEMP\jenkins5037773887088486383.bat Access is denied
- deep learning RNN
- CodeForces149D dfs实现区间dp
- 前端-----JavaScript 初识基础
- 谈一谈java里面的反射机制
- Gogs基本使用介绍
- linux权限管理之基本权限
- #ifdef __cplusplus extern "C" { #endif 含义
- win7禁用Adnimistrator账号登录