<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 这部分代码与文章内容无关,仅作示例用</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"欢迎阅读本篇PHP教程文章。"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
* 标题:stream_socket_recvfrom函数的详细使用方法和步骤介绍是什么?
*
* 在PHP中,stream_socket_recvfrom是一个用于从网络套接字接收数据的函数,通常用于UDP或无连接的套接字通信。
* 它可以从指定的套接字资源中读取数据,并且能够返回发送端的地址信息,方便实现网络数据交互。
*
* 一、函数定义
* int stream_socket_recvfrom(resource $socket, int $length, int $flags = 0, string &$address = null)
*
* 参数说明:
* - $socket:要从中读取数据的套接字资源。
* - $length:最大读取的字节数。
* - $flags:可选,控制读取行为的标志,默认0。
* - &$address:可选,传引用变量,用来接收发送端的地址信息(IP和端口)。
*
* 返回值:
* 返回实际读取的字节数,失败时返回false。
*
* 二、使用步骤及示例
*
* 1. 创建UDP套接字(也可用于TCP但通常用recvfrom用于无连接协议)
* 2. 绑定本地地址和端口,监听数据
* 3. 调用stream_socket_recvfrom接收数据
* 4. 处理接收到的数据及发送端地址
*
* 示例代码:
*/</span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_server</span></span><span>(</span><span><span class="hljs-string">"udp://0.0.0.0:9999"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, STREAM_SERVER_BIND);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"无法创建UDP套接字:<span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)");
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"UDP服务器已启动,监听9999端口...\n"</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-literal">true</span></span><span>) {
</span><span><span class="hljs-variable">$buf</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_recvfrom</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$peer</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$buf</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"接收数据失败\n"</span></span><span>;
</span><span><span class="hljs-keyword">break</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"收到来自 <span class="hljs-subst">$peer</span></span></span><span> 的数据: </span><span><span class="hljs-subst">$buf</span></span><span>\n";
</span><span><span class="hljs-comment">// 可以根据需要回应客户端</span></span><span>
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-string">"已收到数据:"</span></span><span> . </span><span><span class="hljs-variable">$buf</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">stream_socket_sendto</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$peer</span></span><span>);
}
<span class="hljs-comment">/*
* 三、使用注意事项
* - stream_socket_recvfrom适合无连接协议UDP,TCP连接则多用stream_socket_recv。
* - 需要处理返回false的情况,避免程序异常。
* - $address参数是通过引用传递,方便获取发送方信息。
* - 当传入的$length过大时,可能会影响性能,建议根据实际数据大小合理设置。
*
* 总结:
* stream_socket_recvfrom是PHP中处理UDP数据包接收的常用函数,灵活且能够获取发送端信息,
* 适合实现简单的UDP服务器或者网络通信功能。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>