<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>