現在の位置: ホーム> 最新記事一覧> クライアント接続におけるsocket_set_blockアプリケーションの例

クライアント接続におけるsocket_set_blockアプリケーションの例

gitbox 2025-05-27

PHPでネットワークをプログラミングする場合、ソケット操作は基本的で重要なコンテンツです。 socket_set_block関数は、ソケットを操作するときに一般的に使用される関数です。ソケットのブロッキングモードを設定するために使用されます。この記事では、クライアント接続プロセスにおけるsocket_set_block関数の役割に焦点を当て、実際の例コードを使用してその使用を説明します。


1。socket_set_block関数の紹介

Socket_set_block関数は、指定されたソケットをブロッキングモードに設定するために使用されます。いわゆるブロッキングモードは、読み取りおよび書き込み操作が実行されるときに言及します。データが一時的に利用できない場合、関数はデータが利用可能になるか操作が完了するまで待機します。

構文は次のとおりです。

 bool socket_set_block ( resource $socket )
  • $ socket :設定モードが必要なソケットリソース。

  • リターン値はブール値であり、Trueが成功した場合、設定はtrueを返し、 FALSEの場合はfalseを返します。

比較的、ソケットを非ブロッキングモードに設定する関数socket_set_nonblockもあり、読み取りおよび書き込み操作は即時の返品を待ちません。


2。クライアント接続におけるブロッキングモードの役割

クライアントがソケットを介してサーバーに接続する場合、通常、接続が正常に確立されるのを待つか、サーバーがデータを返すのを待つ必要があります。ブロッキングモードにより、クライアントのソケットコールは、結果が自動的に通常の関数呼び出しのように返されるようになります。これは、プログラムが簡単で直感的です。

たとえば、 Socket_Connectを呼び出す場合、ブロッキングモードの場合、関数は接続が成功または失敗するまで現在のプログラムをブロックします。これにより、エラー判断とその後のデータ交換が容易になります。

一部のシナリオでは、ブロッキングモードを使用しない場合、接続プロセスが複雑になり、接続ステータスをポーリングまたはイベント駆動型メカニズムを使用して継続的に検出する必要があります。


3。実用的な例

Socket_set_block関数を使用してソケットをブロッキングモードに設定する方法を示す単純なPHPクライアントの例を示します。サーバーに接続してデータを送信します。

 <?php
// 作成するTCPソケット
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("作成するソケット失败: " . socket_strerror(socket_last_error()));
}

// ブロッキングモードに設定します,後続の操作が完了することを確認してください
if (!socket_set_block($socket)) {
    die("ブロッキングモードの設定に失敗しました");
}

// サーバーに接続します,サーバーアドレス用gitbox.net実際のドメイン名の代わりに,ポートはです80
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
    die("サーバーに接続します失败: " . socket_strerror(socket_last_error($socket)));
}

// 構造HTTPデータをリクエストします
$request = "GET / HTTP/1.1\r\n";
$request .= "Host: $server\r\n";
$request .= "Connection: Close\r\n\r\n";

// リクエストを送信します
socket_write($socket, $request, strlen($request));

// 応答を読んでください
$response = '';
while ($out = socket_read($socket, 2048)) {
    $response .= $out;
}

// 关闭ソケット
socket_close($socket);

// 出力応答コンテンツ
echo $response;
?>