TCP/UDP的接收包方式
2015-08-04 16:52
344 查看
UDP
udp不是流式的,每次接收一个包,长度不超过(65535-28,总包长65535字节,包头28字节)。所以UDP方式下不需要填写任何参数直接调用 $client->recv() 即可。注意如果填写了接收长度,但实际接收到的包超过此长度,那么超过的部分将会被丢弃。
如果Server端是分包发送的,那么调用成需要加while循环来接收,调用端确定接收完毕或者发生超时时退出。
TCP
TCP是流式的,只要有数据就可以一直接收。一般有2种用法。
1、不确定包长度
循环接收,调用端判断是否每个包结尾是否有包结束符,有时或者超时时退出。
2、确定包长度
一般协议都是包头+包体,包头中有包的长度值。
先调用一次 $client->recv(包头长度) ,然后包头后拿出包长度值再 $client->recv(包长度-包头长度, 1). 就可以接收到整个包,如果发生超时表示调用失败。
udp不是流式的,每次接收一个包,长度不超过(65535-28,总包长65535字节,包头28字节)。所以UDP方式下不需要填写任何参数直接调用 $client->recv() 即可。注意如果填写了接收长度,但实际接收到的包超过此长度,那么超过的部分将会被丢弃。
如果Server端是分包发送的,那么调用成需要加while循环来接收,调用端确定接收完毕或者发生超时时退出。
TCP
TCP是流式的,只要有数据就可以一直接收。一般有2种用法。
1、不确定包长度
循环接收,调用端判断是否每个包结尾是否有包结束符,有时或者超时时退出。
2、确定包长度
一般协议都是包头+包体,包头中有包的长度值。
先调用一次 $client->recv(包头长度) ,然后包头后拿出包长度值再 $client->recv(包长度-包头长度, 1). 就可以接收到整个包,如果发生超时表示调用失败。
相关文章推荐
- 读 TCP 协议
- 认识HTTPS
- 【linux高级程序设计】(第十四章)TCP高级应用 2
- Mule HTTP组件监听及请求
- Java下的Session监控:HttpSessionListener HttpSessionAttributeListener || HttpSessionBindingListener
- 博客搬家。新博客地址 http://fangjian0423.github.io/
- TCP UDP 校验算法
- Http基础(记忆笔记)
- iOS基本网络请求
- php处理http post/get请求
- java web给手机端写接口HttpServletRequest ,HttpServletResponse
- 网络编程中的标准处理函数
- CDN(内容分发网络)
- TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系 (转载)
- TCP/IP协议,HTTP协议
- IP头,TCP头,UDP头,MAC帧头定义(转)
- universalimageloader-disk cache,缓存网络请求
- tcp retransmission问题
- HttpServletResponse对象
- TCP协议详解(四)