C语言 c++ php mysql nginx linux lnmp lamp lanmp memcache redis 面试 笔记 ppt 设计模式 问题 远程连接

TCP/UDP的接收包方式

UDP udp不是流式的,每次接收一个包,长度不超过(65535-28,总包长65535字节,包头28字节)。所以UDP方式下不需要填写任何参数直接调用 $client->recv() 即可。注意如果填写了接收长度,但实际接收到的包超过此长度,那么超过的部分将会被丢弃。 如果Server端是分包发送的,那么调用成需要加while循环来接收,调用端确定接收完毕或者发生超时时退出。 TCP TCP是流式的,只要有数据就可以一直接收。一般有2种用法。 1、不确定包长度 循环接收,调用端判断是否每个包结尾是否有包结束符,有时或者超时时退出。 2、确定包长度 一般协议都是包头+包体,包头中有包的长度值。 先调用一次 $client->recv(包头长度) ,然后包头后拿出包长度值再 $client->recv(包长度-包头长度, 1). 就可以接收到整个包,如果发生超时表示调用失败。
posted on 2015-08-04 16:52  思齐_  阅读(2319)  评论(0编辑  收藏  举报