現在の位置: ホーム> 最新記事一覧> socket_accept()を使用してクライアント接続を受信する方法

socket_accept()を使用してクライアント接続を受信する方法

M66 2025-05-24

ネットワークプログラミングでは、サーバーはクライアントからの接続要求を受け入れることができる必要があります。 PHPは、 Socket_Accept()がサーバーリスニングと受信接続を実装するための重要な関数である基礎となるネットワーク通信を処理するための一連のソケット機能を提供します。この記事では、socket_accept()を使用してクライアント接続を受信し、例を介してそれらを使用する方法を示す方法を詳細に紹介します。

1。関数の紹介

socket_accept()は、ソケットリスニングキューから接続を受信するPHPの関数です。基本的な構文は次のとおりです。

 socket_accept(Socket $socket): Socket|false
  • パラメーター

  • 返品値

    • クライアントとの通信のために、成功したときに新しいソケットインスタンスを返します。

    • 障害時にfalsを返します。

2。基本的な使用手順

socket_accept()を使用する前に、通常、次の手順を完了する必要があります。

  1. ソケットの作成: socket_create()

  2. バインドアドレスとポート: socket_bind()

  3. リスニングを開始: socket_listen()

  4. 接続の受信: socket_accept()

  5. クライアントとのコミュニケーション: socket_read()およびsocket_write()

  6. 接続を閉じる: socket_close()

3。サンプルコード

Socket_accept()を使用してクライアント接続を受信する方法を示す完全なSocket Serverの例を次に示します。

 <?php
// アドレスとポートを設定します
$address = '0.0.0.0';
$port = 12345;

// 作成する socket
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($serverSocket === false) {
    die("socket_create() 失敗: " . socket_strerror(socket_last_error()) . "\n");
}

// アドレスとポートをバインドします
if (!socket_bind($serverSocket, $address, $port)) {
    die("socket_bind() 失敗: " . socket_strerror(socket_last_error($serverSocket)) . "\n");
}

// 接続を聞き始めます
if (!socket_listen($serverSocket)) {
    die("socket_listen() 失敗: " . socket_strerror(socket_last_error($serverSocket)) . "\n");
}

echo "サーバーが開始されます,リスニング {$address}:{$port} ...\n";

// クライアント接続を受信します
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
    echo "socket_accept() 失敗: " . socket_strerror(socket_last_error($serverSocket)) . "\n";
} else {
    // クライアントにウェルカムメッセージを送信します
    $welcome = "Connectへようこそ m66.net サーバ\n";
    socket_write($clientSocket, $welcome, strlen($welcome));

    // クライアントデータをお読みください
    $input = socket_read($clientSocket, 1024);
    echo "クライアントメッセージを受け取りました: " . trim($input) . "\n";

    // クライアントに応答します
    $response = "あなたはそれを送った: " . $input;
    socket_write($clientSocket, $response, strlen($response));

    // クライアント接続を閉じます
    socket_close($clientSocket);
}

// 关闭サーバ socket
socket_close($serverSocket);
?>

4。注意すべきこと

  1. 許可の問題:低いポート(80または443など)をリッスンする場合、管理者の権限が必要になる場合があります。

  2. タイムアウト処理socket_accept()はブロッキング関数です。非ブロッキングモードが必要な場合は、 socket_set_nonblock()を使用できます。

  3. セキュリティ:悪意のある接続を防ぐために、生産環境に適切なエラー処理とロギングメカニズムを追加する必要があります。

  4. マルチクライアントサポート:この例は、1つのクライアント接続のみを処理します。複数のクライアントを同時に処理する必要がある場合は、 PCNTL_FORK()またはマルチスレッド拡張機能を組み合わせることができます。

5。概要

socket_accept()は、PHPネットワーク通信に不可欠なリンクであり、サーバーがリスニングキューからクライアント接続を抽出し、その後の処理を実行できるようにします。この記事の説明と例を通じて、基本的なソケットサーバーの構築プロセスをマスターし、 socket_accept()を使用して、クライアント接続の受信と相互作用機能を実現できるはずです。