現在の位置: ホーム> 最新記事一覧> stream_socket_recvfrom関数の詳細な使用方法と手順は何ですか?

stream_socket_recvfrom関数の詳細な使用方法と手順は何ですか?

gitbox 2025-08-04
<span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * タイトル:stream_socket_recvfrom関数の詳細な使用方法と手順は何ですか??
 *
 * 存在するPHP真ん中,stream_socket_recvfromネットワークソケットからデータを受信するための関数です,通常使用されますUDPまたはコネクションレスソケット通信。
 * 它可以从指定的ソケット资源真ん中读取数据,送信先のアドレス情報を返すことができます,ネットワークデータの相互作用を実現するのに便利です。
 *
 * 1つ、関数定義
 * int stream_socket_recvfrom(resource $socket, int $length, int $flags = 0, string &amp;$address = null)
 *
 * パラメーターの説明:
 * - $socket:要从真ん中读取数据的ソケット资源。
 * - $length:最大バイト数を読み取ります。
 * - $flags:オプション,読み取り動作を制御するフラグ,デフォルト0。
 * - &amp;$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">?&gt;</span></span><span>
</span></span>