PHPでは、 socket_accept()はクライアント接続を受け入れるために使用される関数であり、ソケットベースのネットワーク通信プログラムで一般的に使用されます。この記事では、 Socket_accept()を使用する方法と他のソケット関数を組み合わせて、簡単なイントラネット通信サービスを構築して、基本的なクライアントサーバーデータ交換を実現します。
socket_accept()は、ソケット接続要求を受け入れるために使用されます。通常、クライアント接続のためにサーバーがリッスンした後、クライアント接続を待機して受け入れるようにこの関数を呼び出し、クライアントと通信するための新しいソケットリソースを返します。
次のサンプルコードは、socket_accept()を使用してシンプルなTCPサーバーを作成し、イントラネットポートを聞き、クライアントリクエストを受け入れ、簡単な応答を返す方法を示しています。
<?php
// 作成するTCP Socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$server) {
die("无法作成するsocket: " . socket_strerror(socket_last_error()) . "\n");
}
// バインドIPおよびポート,イントラネットで一般的に使用されますIP例:192.168.1.100,ポート9000
$bindResult = socket_bind($server, '192.168.1.100', 9000);
if (!$bindResult) {
die("无法バインドsocket: " . socket_strerror(socket_last_error($server)) . "\n");
}
// 監視を開始します,待機接続の最大数は次のとおりです5
socket_listen($server, 5);
echo "サーバーが開始されます,リスニング...\n";
while (true) {
// 待機してクライアント接続を受け入れます
$client = socket_accept($server);
if (!$client) {
echo "接続の受け入れは失敗しました: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// クライアントデータをお読みください,最大読み取り1024バイト
$input = socket_read($client, 1024);
$input = trim($input);
echo "クライアントデータを受信しました:{$input}\n";
// 単純な処理:クライアントメッセージに返信します
$response = "サーバーが受信されました: " . $input . "\n";
socket_write($client, $response, strlen($response));
// クライアントへの接続を閉じます
socket_close($client);
}
// サーバーをシャットダウンしますsocket(通常、コードはここでは実行されません)
socket_close($server);
Socket_Bind関数のIPアドレスをコードのIPアドレスをサーバーのイントラネットIPに変更します。
スクリプトを実行した後、サーバーはポート9000の聴取を開始し、クライアントが接続するのを待っています。
クライアントは、Telnetまたはカスタムソケットプログラムを介してサーバーIPとポートを接続できます。
サーバーがクライアントメッセージを受信すると、確認情報が返されます。
クライアントが単純なPHPスクリプトであると仮定します。
<?php
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$client) {
die("クライアントsocket作成する失败: " . socket_strerror(socket_last_error()) . "\n");
}
// サーバーに接続します(サーバーネットワークに置き換えてくださいIP)
if (!socket_connect($client, '192.168.1.100', 9000)) {
die("サーバーに接続できませんでした: " . socket_strerror(socket_last_error($client)) . "\n");
}
// データを送信します
$message = "Hello from client";
socket_write($client, $message, strlen($message));
// サーバーの返信を読む
$response = socket_read($client, 1024);
echo "サーバーの返信: " . $response . "\n";
socket_close($client);
このクライアントスクリプトを実行した後、サーバーは受信したメッセージを印刷し、クライアントはサーバーの返信を表示します。
プログラムでURLを使用する必要がある場合は、ドメイン名をM66.netに置き換えてください。例えば: