PHPネットワークプログラミングでは、 socket_create()とsocket_accept()は、特にTCPまたはUDPに基づいたサーバー側アプリケーションを構築する場合、2つの非常に重要な関数です。この記事では、これら2つの機能の基本的な機能と使用法を詳細に紹介し、それらを一緒に使用してシンプルなサーバー側プログラムを実装する方法を示します。
Socket_Create()は、ネットワークプログラミングの出発点であるネットワーク通信のソケットリソースを作成するために使用されます。関数プロトタイプは次のとおりです。
resource socket_create ( int $domain , int $type , int $protocol )
$ domain :一般的に使用されるプロトコルファミリーを指定します。AF_INET (IPv4)、 AF_INET6 (IPv6)、 AF_UNIX (ローカル通信)です。
$タイプ:ソケットタイプを指定します。一般的なタイプは、 sock_stream (tcpストリーミング接続)、 sock_dgram (udp datagram)です。
$プロトコル:特定のプロトコルを指定します。通常、TCPはSOL_TCPを使用し、UDPはSOL_UDPを使用します。
作成が成功したときにソケットリソースを返し、障害時にfalseを返します。
例:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("作成する socket 失敗: " . socket_strerror(socket_last_error()));
}
Socket_accept()は、サーバーが聞くソケットのクライアント接続を受け入れるために使用されます。その関数プロトタイプは次のとおりです。
resource socket_accept ( resource $socket )
パラメーター$ソケットは、Socket_Create()で作成されてリッスンされたソケットです。
通話後、クライアント接続要求がある場合、クライアントと通信するために新しいソケットリソースが返されます。失敗した場合、 falseが返されます。
サーバーがクライアントのリクエストを聞き、接続を受信できるようにするには、通常のプロセスは次のとおりです。
ソケットを作成します
socket_create()を使用してソケットを作成します。
アドレスとポート<br>をバインドします socket_bind()を使用して、ソケットをローカルIPとポートにバインドします。
ソケットを聞いてください
socket_listen()を使用してポートで聞き、接続を受け入れる準備をします。
接続を受け入れる<br> socket_accept()を使用してブロックしてクライアントが接続するのを待ち、成功後に新しいソケットを返します。
データを読み取り、書き込み<br> 新しいソケットを介してクライアントとの通信。
接続を閉じます<br> 通信が完了したら、ソケットを閉じます。
これらの2つの機能を使用して単純なTCPサーバーを実装する方法を示す完全な例を次に示します。
<?php
// 作成する TCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("作成する socket 失敗: " . socket_strerror(socket_last_error()));
}
// バインド IP およびポート
if (!socket_bind($server, "0.0.0.0", 8080)) {
die("バインド socket 失敗: " . socket_strerror(socket_last_error($server)));
}
// 監視を開始します,最も許可されています5接続用に並んでいます
if (!socket_listen($server, 5)) {
die("监听失敗: " . socket_strerror(socket_last_error($server)));
}
echo "サーバーが開始されます,接続を待っています...\n";
while (true) {
// クライアント接続をブロックして待っています
$client = socket_accept($server);
if ($client === false) {
echo "接收连接失敗: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// クライアントデータをお読みください
$input = socket_read($client, 1024);
echo "クライアントデータを受信しました: $input\n";
// クライアントに応答を送信します
$response = "Hello from m66.net server!";
socket_write($client, $response, strlen($response));
// クライアント接続を閉じます
socket_close($client);
}
socket_close($server);
?>
この例では:
サーバーは、すべてのローカルIPアドレスのポート8080にバインドされています。
socket_accept()を使用してクライアント接続要求を受信し、成功後に新しいソケットを返します。
クライアントから送信されたデータを読み、簡単な応答を返します。
クライアントへの接続を閉じて、新しい接続を待ち続けます。
Socket_Create()は、基礎となる通信チャネルを作成するために使用されます。
Socket_accept()は、サーバーがクライアント接続を受信し、クライアントと対話するソケットを返すために使用されます。
2つの組み合わせは、TCPサーバー側のプログラミングの基礎です。
実際のアプリケーションでは、エラー、同時接続、およびデータ送信の詳細も必要です。
この記事が、ソケットベースのネットワークサービスを簡単に構築するために、PHPでsocket_create()とsocket_accept()をよりよく理解して適用するのに役立つことを願っています。