PHPでソケットソケットを接続する方法

little bottle
リリース: 2023-04-06 08:14:01
オリジナル
2564 人が閲覧しました

ソケットは通常「ソケット」とも呼ばれ、IP アドレスとポートを記述するために使用され、通信チェーンのハンドルです。通常、アプリケーションはサーバーにリクエストを送信するか、「ソケット」を通じてネットワークリクエストに応答します。この記事では、主に PHP におけるソケット文字間の接続処理について説明しますが、ある程度の参考値があるので、興味のある方は学んでみてください。

#リンクの開始方法とローカル ソケットの接続先ターゲットに応じて、ソケット間の接続プロセスは 3 つのステップに分けることができます。

1. サーバー監視: サーバー側ソケットは特定のクライアントソケットを見つけず、接続待ちの状態となり、ネットワークの状態をリアルタイムに監視します。

2. クライアント要求: クライアントのソケットによって行われる接続要求を指し、接続対象はサーバーのソケットです。これを行うには、クライアントのソケットは、まず接続先のサーバーのソケットを認識し、サーバーのソケットのアドレスとポート番号を指定して、サーバーのソケットと同様に接続要求を行う必要があります。

3. 接続確認: サーバー側ソケットがクライアント ソケットの接続要求をリッスンまたは受信したときに、クライアント ソケットの要求に応答することを意味します。スレッドを作成し、サーバー側ソケットの記述をクライアントに送信し、クライアントがこの記述を確認すると、接続が確立されます。サーバー側ソケットは引き続きリスニング状態にあり、他のクライアント ソケットからのリンク要求を受信し続けます。

#1. テスト環境:

サーバー IP: xxx.xxx.xxx.1

# #クライアント IP: xxx.xxx.xxx.2

2. テスト プロセス:

クライアント サーバーはこのマシン (xxx .x​​xx . xxx.xxx.1) ソケットを介してサーバー (xxx.xxx.xxx.2) のソケット サーバーにデータを送信します。クライアントから送信されたデータを受信した後、サーバーはクライアントにデータを返します。

3. サーバー ファイルの内容:

<?php
  //获取tcp协议号吗.
  $tcp = getprotobyname("tcp");
  //建立server端socket , 创建并返回一个套接字,也称做一个通讯节点.一个典型的网络连接由2个套接字构成 , 一个运行在客户端 , 另一个运行在服务器端.
  $socket = socket_create(AF_INFT , SOCK_STREAM , $tcp);
  //绑定要监听的ip和端口 , 这里绑定的ip一定要写局域网ip , 写成127.0.0.1客户端将无法与服务器端建议连接.
  socket_bind($socket , &#39;xxx.xxx.xxx.1&#39; , 10008);
  //监听端口
  socket_listen($socket);
  //初始化一个数据 , 和客户端通信
  $buffer = "connect";
  while(true){
    //接受客户端请求过来的yigesocket连接
    $connection = socket-accept($scoket);
    if(!connection){
      echo "connect faild";
    } else {
    echo "Socket connected \n";
    //向客户传递一个信息数据
   if($buffer != ""){
    echo "send data to client\n";
    socket_write($connection , $buffer , "\n");
    echo "Wrote to socket\n";    
} else {
    echo "no data in the buffer\n";
}   
  //从客户端获取得的数据
  while($data = $socket_read($connection , 1024 , PHP_NORMAL_READ)){
  printf("Buffer:".$data.&#39;\n&#39;);
  //取得信息给客户端一个反馈 ,Thank you client , you data is Received success发给客户端的回应信息.
  socket-wirte($coennection , "Thank you client , you data is Received success \n");
}
}
//关闭sockket
socket_close($connection);
printf("Closed the socket\n");
  
  }
?>
ログイン後にコピー
#4. クライアント ファイルの内容:

<?php
  //建立客户端的socket连接
  $socket = se);
  //连接服务器端socket
  $connection = socket_connect($socket , &#39;xxx.xxx.xxx.1&#39; , 10008);
  //要求发送到服务端的信息.
  $send_data = "This data will Send to server!";
  //客户端去连接服务端并接受服务端返回的数据 , 如果返回的数据保护not connect就提示不能连接.
  while($buffer = @socket_read($socket , 1024,PHP_NORMAL_READ)){
    if(preg_match("/not connect/" , $buffer)){
    echo "don&#39;t connect\n";
    break;
  } else {
  //服务端传来的信息
  echo "Buffer Data: ".$buffer .&#39;\n&#39;;
  echo "Writing to Socket\n";
  //将客户的信息写道通道中 , 传给服务器端
  if(!socket_write($socket , "$send_data\n")){
     echo "Write failed\n";
  }
  //服务器端收到信息后 , 客户端接受服务端传给客户端的回应信息.
  while($buffer = socket_read($socket , 1024 , PHP_NORMAL_READ)){
    echo "send to server: $send-data\n response from server was:".$buffer."\n";
  }
  }
  }
?>
ログイン後にコピー

5. サーバーソケットサービス上でプロセスを開始します。

#/usr/local/php/bin/php -a/home/server.php
Interactive mode enable 互动模式启动
ログイン後にコピー

6. サーバーが起動したら、開始されたプロセスとポートを確認します

#netstat -tnlp |grep 10008
tcp   0  0 192.168.13:10008  0.0.0.0:*  LISTEN
28892/php
ログイン後にコピー
7. クライアント (192.168.1.2) で送信を実行します

#/usr/local/php/bin/php -a client.php
Interactive mode enabled
ログイン後にコピー

8. サーバーに戻って表示します合格案内が届きました。

#/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
 
Socket connected
send data client
Wrote to socket
Buffer:This data will Send to server!
ログイン後にコピー

関連チュートリアル: PHP ビデオ チュートリアル

以上がPHPでソケットソケットを接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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