ホームページ  >  記事  >  バックエンド開発  >  PHPのソケットプログラミング機能の使い方は?

PHPのソケットプログラミング機能の使い方は?

王林
王林オリジナル
2023-06-03 21:51:011264ブラウズ

PHP は Web 開発で広く使用されているプログラミング言語であり、多くのネットワーク プログラミング アプリケーションをサポートしています。中でもソケットプログラミングは、ネットワーク通信を実現するためによく使われる手法で、プログラムがプロセス間通信を実現し、ネットワークを介してデータを送信することができます。

この記事では、PHPのソケットプログラミング機能の使い方を紹介します。

1. ソケット プログラミングの概要

ソケット (ソケット) は抽象的な概念です。ネットワーク通信におけるオープン ポートを表します。プロセスは、データを交換するためにポートに接続する必要があります。他のプロセス。

ソケットは一般に、TCP ソケットと UDP ソケットの 2 つのタイプに分類されます。 TCP ソケットは信頼性の高い接続指向の通信に適しており、UDP ソケットはコネクションレス通信、データ パケットが比較的小さく遅延の影響を受けやすいアプリケーションに適しています。

2. PHP を使用したソケット プログラミング

PHP でソケット プログラミングを使用するには、socket_create() 関数を呼び出してソケット接続を作成し、次に必要に応じてソケット オプションを設定し、最後にソケット_connect() を呼び出す必要があります。 ) 関数またはソケットバインド() 関数を使用して、アドレスとポートをさらに接続またはバインドします。最後に、socket_close() 関数を呼び出して切断します。

1. ソケット接続の作成

socket_create() 関数はソケット接続を作成できます。

$socket = socket_create(AF_INET, SOCK_STREAM, 0);

最初のパラメータはアドレス ファミリ ipv4 を指定し、2 番目のパラメータはソケット タイプをストリーミング ソケット (ソケット ストリーム) として指定します。 3 番目のパラメータは通常 0 で、デフォルトのプロトコル (TCP/IP) を使用することを意味します。

2. ソケット オプションの設定

socket_set_option() 関数を使用して、再利用アドレスの設定などのソケット オプションを設定できます。

socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

このうち、最初のパラメータはソケット接続リソースで、2 番目のパラメータはソケット レベルを表します。たとえば、ソケット オプションを設定するには SOL_SOCKET レベルを使用する必要があります。3 番目のパラメータは、設定するオプションを指定します。 、SO_REUSEADDR オプションは 1 に設定されており、アドレスの再利用を有効にします。

3. アドレスとポートの接続またはバインド

socket_connect() 関数はリモート Socket サーバーへの接続に使用され、socket_bind() 関数はローカル Socket サーバー アドレスのバインドに使用されます。そして港。

たとえば、socket_bind() 関数を使用して、ローカル アドレス 127.0.0.1 とポート 8888 をバインドします。

socket_bind($socket, '127.0.0.1', 8888);

4. 接続リクエストのリッスン

socket_listen() 関数を使用して、接続リクエストのリッスンを開始します。

socket_listen($socket);

5. データの受信と送信

socket_accept() 関数を使用して接続要求を受信し、データの読み取りや書き込みなどのデータ転送操作を実行します。

$client = socket_accept($socket);
$bytes = socket_recv($client, $data, 1024, 0);
socket_send($client, $data, $bytes, 0);

このうち、socket_recv() 関数はデータの受信に使用できます。最初のパラメータはソケット接続リソース、2 番目のパラメータは受信したデータの保存に使用され、3 番目のパラメータは最大読み取り値を表しますデータの長さ、4 番目のパラメータは通常 0 で、ソケット フラグが使用されないことを意味します。

socket_send() 関数を使用して、クライアントにデータを送信できます。

6. 接続を閉じる

socket_close() 関数を使用して接続を閉じます。

socket_close($socket);

3. サンプル コード

以下は、ソケット通信用のソケット サーバーとクライアントの簡単な完全なサンプル コードです。

サーバー側:

<?php
$host = "127.0.0.1";
$port = 8888;

// 创建Socket连接
$socket = socket_create(AF_INET, SOCK_STREAM, 0);

// 设置Socket选项
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

// 绑定本地地址和端口
if (!socket_bind($socket, $host, $port)) {
    echo "Socket bind failed!";
}

// 监听连接请求
socket_listen($socket);

// 接受连接请求
$client = socket_accept($socket);

// 读取数据
$msg = socket_read($client, 1024);

// 输出接收到的数据
echo "Received message: {$msg}";

// 向Client发送数据
$response = "Message from Server: Hi Client!";
socket_write($client, $response, strlen($response));

// 关闭连接
socket_close($client);
socket_close($socket);
?>

クライアント側:

<?php
$host = "127.0.0.1";
$port = 8888;

// 创建Socket连接
$socket = socket_create(AF_INET, SOCK_STREAM, 0);

// 连接到Server
if (!socket_connect($socket, $host, $port)) {
    echo "Socket connect failed!";
}

// 向Server发送数据
$message = "Hello Server!";
socket_write($socket, $message, strlen($message));

// 接收Server的响应
$response = socket_read($socket, 1024);

// 输出Server响应
echo "Received message: {$response}";

// 关闭连接
socket_close($socket);
?>

IV. 概要

この記事では、PHP でソケット プログラミングを使用してネットワーク通信を実現する方法を紹介します。ソケット接続の作成、ソケット オプションの設定、ソケット アドレスとポートの接続/バインド、データの送受信、ソケット接続の終了、その他の手順が含まれます。

ソケット プログラミングは、プロセスがネットワーク上で通信し、データの相互運用性と交換を実現できるようにする、非常に重要で一般的に使用されるネットワーク プログラミング テクノロジです。この記事の導入により、読者は PHP での Socket プログラミングの使用方法をある程度理解し、習得できると思います。

以上がPHPのソケットプログラミング機能の使い方は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。