ホームページ >php教程 >PHP开发 >PHP ソケット プログラミングの入門

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

黄舟
黄舟オリジナル
2016-12-17 10:34:501640ブラウズ

簡単な例から始めましょう -- 入力文字列を受け取り、この文字列を処理してクライアントに返す 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、または

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