🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# socket_recv * * * * * 说明: >从已连接的socket接收数据 语法: ~~~ int socket_recv ( resource $socket , string &$buf , int $len , int $flags ) ~~~ 参数: | 参数 | 描述 | | --- | --- | | socket | 必须是一个由 socket_create() 创建的socket资源| | buf | 从socket中获取的数据将被保存在由 buf 制定的变量中。 如果有错误发生,如链接被重置,数据不可用等等, buf 将被设为 NULL| |len| 长度最多为 len 字节的数据将被接收| |flags| flags 的值可以为下列任意flag的组合。使用按位或运算符(|)来 组合不同的flag| :-: 可用的 flags 值 | Flag | 描述 | | --- | --- | | MSG_OOB | 处理超出边界的数据 | | MSG_PEEK | 从接受队列的起始位置接收数据,但不将他们从接受队列中移除。 | | MSG_WAITALL | 在接收到至少 len 字节的数据之前,造成一个阻塞,并暂停脚本运行(block)。但是, 如果接收到中断信号,或远程服务器断开连接,该函数将返回少于 len 字节的数据。 | | MSG_DONTWAIT | 如果制定了该flag,函数将不会造成阻塞,即使在全局设置中指定了阻塞设置。 | 返回值: | 成功 | 失败 | | --- | --- | | 返回一个数字,表示接收到的字节数 | false | 返回失败,错误代码会传入 socket_last_error() ,将此参数传入 socket_strerror() 可以得到错误的文字说明。 技术细节: PHP版本:PHP 4 >= 4.1.0, PHP 5, PHP 7 实例: ~~~ error_reporting(E_ALL); echo "<h2>TCP/IP Connection</h2>\n"; /* 获取www 服务端口*/ $service_port = getservbyname('www', 'tcp'); /* 获取ip地址 */ $address = gethostbyname('www.baidu.com'); /* Create a TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } $in = "HEAD / HTTP/1.1\r\n"; $in .= "Host: www.baidu.com\r\n"; $in .= "Connection: keep-alive\r\n\r\n"; $out = ''; echo "发送http头请求..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading response:\n\n"; $buf = 'This is my buffer.'; if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) { echo "Read $bytes bytes from socket_recv(). Closing socket..."; } else { echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n"; } socket_close($socket); echo $buf . "\n"; echo "OK.\n\n"; ~~~ 资料来源: http://php.net/manual/zh/function.socket-recv.php