PHP ソケット プログラミングの入門

黄舟
リリース: 2016-12-17 10:34:50
オリジナル
1606 人が閲覧しました

簡単な例から始めましょう -- 入力文字列を受け取り、この文字列を処理してクライアントに返す TCP サービスです。対応するコードは次のとおりです:

php コード:

<?
// 设置一些基本的变量
$host="192.168.1.99";
$port=1234;
// 设置超时时间
set_time_limit(0);
// 创建一个Socket
$socket=socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create
socket\n");
//绑定Socket到端口
$result=socket_bind($socket,$host,$port) or die("Could not bind to
socket\n");
// 开始监听链接
$result=socket_listen($socket,3) or die("Could not set up socket
listener\n");
// accept incoming connections
// 另一个Socket来处理通信
$spawn=socket_accept($socket) or die("Could not accept incoming
connection\n");
// 获得客户端的输入
$input=socket_read($spawn,1024) or die("Could not read input\n");
// 清空输入字符串
$input=trim($input);
//处理客户端输入并返回结果
$output=strrev($input) ."\n";
socket_write($spawn,$output,strlen($output)) or die("Could not write
output\n");
// 关闭sockets
socket_close($spawn);
socket_close($socket);
?>
ログイン後にコピー

以下は各ステップの詳細な手順です。 :

1. 最初のステップは、Socket が実行されているサーバーの IP アドレスとポートを保存する 2 つの変数を作成することです (このポートは 1 ~ 65535 の数値にすることができます)。 )、このポートが使用されていない場合に限ります。

<?
// 设置两个变量
$host="192.168.1.99";
$port=1234;
?>
ログイン後にコピー

2. サーバー側で set_time_out() 関数を使用すると、クライアントの接続を待機している間に PHP がタイムアウトしないようにできます。

PHP コード:

<?
// 超时时间
set_time_limit(0);
?>
ログイン後にコピー

3. 前の内容に基づいて、socket_creat() 関数を使用してソケットを作成します。この関数は、後続のすべての関数で使用されるソケット ハンドルを返します。

PHP コード:

<?
// 创建Socket
$socket=socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create socket\n");
?>
ログイン後にコピー

最初のパラメータ「AF_INET」はドメイン名を指定するために使用されます。
2 番目のパラメータ「SOCK_STREM」は、作成されるソケットのタイプ (この場合は TCP タイプ) を関数に伝えます

したがって、 UDP ソケットでは、次のコードを使用できます:

PHP コード:

<?
// 创建 socket
$socket=socket_create(AF_INET,SOCK_DGRAM,0) or die("Could not create socket\n");
?>
ログイン後にコピー

4. ソケット ハンドルが作成されたら、次のステップは、それを指定するか、指定したアドレスとポートにバインドすることです。

PHP コード:

<?
// 绑定 socket to 指定地址和端口
$result=socket_bind($socket,$host,$port) or die("Could not bind to socket\n");
?>
ログイン後にコピー

5. ソケットが作成され、ポートにバインドされた後、PHP では、socket_listen() 関数を使用して外部接続のリスニングを開始できます。 、数値を指定できます (この場合、2 番目のパラメーター: 3)

PHP コード:

<?
// 开始监听连接
$result=socket_listen($socket,3) or die("Could not set up socket listener\n");
?>
ログイン後にコピー

6 これまでのところ、サーバーは基本的にクライアントからの接続リクエストを待つだけです。クライアント 接続が受信されると、socket_assept() 関数が動作し、接続リクエストを受信し、クライアントとサーバー間の情報を処理する別のサブソケットを呼び出します:

PHP コード:サブソケットは後続のクライアント/サーバー通信に使用できます。

7. 接続が確立されると、サーバーはクライアントが何らかの入力情報を送信するのを待ちます。この情報は、socket_read() 関数によって取得できます。 、そしてそれは PHP の $input 変数に割り当てられます。



PHP コード:

<?
//接受请求链接
// 调用子socket 处理信息
$spawn=socket_accept($socket) or die("Could not accept incoming connection\n");
?>
ログイン後にコピー

socker_read の 2 番目のパラメーターは、読み取られるバイト数を指定するために使用され、それを使用してサイズを制限することができますクライアントから取得したデータ。

注:socket_read 関数は、n、t、または

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート