PHPでは、ソケットプログラミングは、カスタムサーバープログラムの構築に適した、基礎となるネットワーク通信方法です。この記事では、socket_accept()関数を使用してクライアント接続を受け入れ、 socket_write()関数を介してクライアントに応答を送信する方法を紹介します。
まず、ソケットリソースを作成し、指定されたIPアドレスとポートにバインドして、クライアントリクエストをリッスンする必要があります。
<?php
// aを作成しますTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() 失敗: " . socket_strerror(socket_last_error()) . "\n");
}
// バインドIPおよびポート,假设バインド本地IPおよびポート8080
$bind = socket_bind($socket, "0.0.0.0", 8080);
if ($bind === false) {
die("socket_bind() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n");
}
バインディングが成功した後、 socket_listen()を呼び出してリスニングを開始し、 socket_accept()を使用してブロックしてクライアントが接続するのを待ちます。
// 監視を開始します,最も許可されています5接続用に並んでいます
socket_listen($socket, 5);
echo "サーバーの起動,クライアント接続を待っています...\n";
while (true) {
// 阻塞クライアント接続を待っています
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
echo "クライアントが接続されています\n";
クライアント接続を受信した後、クライアントデータはsocket_read()を介して読み取り、 socket_write()を使用してクライアントに応答を送信できます。たとえば、簡単なウェルカムメッセージを送信します。
// クライアントデータをお読みください,最大読み取り1024バイト
$input = socket_read($clientSocket, 1024);
echo "クライアントメッセージを受け取りました: $input\n";
// 応答データを送信します
$response = "訪問してくださいm66.netサーバ!\n";
socket_write($clientSocket, $response, strlen($response));
// クライアント接続を閉じます
socket_close($clientSocket);
}
サーバーをシャットダウンする必要がある場合は、 socket_close()を呼び出してリソースをリリースします。
socket_close($socket);
上記のコードは、次のことに焦点を当てた単純なPHPソケットベースのサーバーの例を示しています。
socket_create()を使用してソケットを作成します。
socket_bind()を使用して、IPとポートをバインドします。
socket_listen()を使用してリスニングを開始します。
socket_accept()を使用して、クライアント接続の待機をブロックします。
socket_write()を使用して、クライアントにデータ応答を送信します。
このようにして、PHPネイティブソケットプログラミングを介して基本的なTCPサーバーを構築し、クライアントの接続と通信を柔軟に処理できます。