現在の位置: ホーム> 最新記事一覧> PHPのsocket_accept()関数を使用して、単純なエコーサーバー(Echo Server)を実装する方法は?

PHPのsocket_accept()関数を使用して、単純なエコーサーバー(Echo Server)を実装する方法は?

M66 2025-06-26

PHPでは、ソケット拡張機能を介してネットワークサービスプログラムを作成できます。その中で、 socket_accept()関数は、TCPベースのサーバーアプリケーションを構築する際の重要な機能の1つです。この記事では、完全な例を使用して、 socket_accept()を使用してシンプルなエコーサーバー(Echo Server)を実装する方法について説明します。

1。socket_accept()関数の紹介

socket_accept()は、クライアントからの接続要求を受け入れるために使用されます。この関数は、接続が入るまでサーバーソケットでブロックされます。成功すると、クライアントとの通信に使用できる新しいソケットリソースを返します。

文法:

 resource socket_accept ( resource $socket )
  • $ socketは、 Socket_create()およびsocket_bind()を介して作成および聴くサーバーソケットです。

  • クライアントと通信するソケットリソースを返します。

2。エコーサーバーを構築するための基本的な手順

簡単なエコーサーバーを作成するための完全な手順は次のとおりです。

1.サーバーソケットを作成します

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("socket_create() 失敗: " . socket_strerror(socket_last_error()) . "\n");
}

2。IPアドレスとポートをバインドします

$host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
    die("socket_bind() 失敗: " . socket_strerror(socket_last_error($server)) . "\n");
}

3。接続を聞いてください

if (!socket_listen($server, 5)) {
    die("socket_listen() 失敗: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "サーバーが開始されます,ポートを聞いてください $port ...\n";

4.接続とプロセスデータを受け入れます

while (true) {
    $client = socket_accept($server);
    if ($client === false) {
        echo "socket_accept() 失敗: " . socket_strerror(socket_last_error($server)) . "\n";
        continue;
    }

    $msg = "EchoサーバーへのConnectへようこそ!コンテンツを入力してください,サーバーはそのまま返されます。\n";
    socket_write($client, $msg, strlen($msg));

    while (true) {
        $input = socket_read($client, 2048, PHP_NORMAL_READ);
        if ($input === false || trim($input) === 'exit') {
            break;
        }
        $input = trim($input);
        $output = "あなたは入りました: $input\n";
        socket_write($client, $output, strlen($output));
    }

    socket_close($client);
    echo "クライアント接続が閉じました。\n";
}

5。サーバーをオフにします

サーバーを停止する必要がある場合は、メインソケットを閉じることができます。

 socket_close($server);

3。テスト方法

TELNETまたはTCP接続をサポートするクライアントツールを使用して、サーバーに接続できます。

 telnet m66.net 12345

接続が成功した後、サーバーはウェルカムメッセージに応答し、入力したものをそのまま返します。

4。注意すべきこと

  • PHPのソケット拡張はデフォルトでは有効ではなく、 PHP.iniで有効にする必要があります。

  • この例はブロッキングモードであり、デモンストレーションと教育の目的に適しています。実際の生産環境では、非ブロッキングモードを使用するか、 stream_select()などのメソッドを使用してマルチクライアントサポートを実現することをお勧めします。

  • ファイアウォールとオペレーティングシステムにより、リスニングポートが通信できるようにしてください。

5。概要

socket_accept()を介して、PHPは基本的なTCPネットワークアプリケーションを構築できます。この記事で実装されているEchoサーバーは、ソケットプログラミングメカニズムを理解するための良い出発点です。これに基づいてさらに拡張して、チャットルーム、リモートコントロールなど、より複雑なネットワークサービスを実装できます。

Echo Serverの例は、ソケットプログラミングで最も基本的なモデルの1つですが、ネットワークプログラミングへのドアが開きます。これらの基礎を習得することにより、ネットワーク通信におけるPHPの可能性は無限に拡大されます。