ホームページ > バックエンド開発 > PHPチュートリアル > PHP技術の進歩 PHP SOCKET技術の研究

PHP技術の進歩 PHP SOCKET技術の研究

黄舟
リリース: 2023-03-03 14:26:02
オリジナル
1502 人が閲覧しました

今日は、PHP と C 言語の間でソケットを介して通信するプログラムを作成しようとしました。PHP のマニュアルを読んだところ、fsockopen() を介してソケット接続を確立する方法がいくつかあることがわかりました。次に、 fputs() を使用してメッセージを送信し、 fgets() を使用してメッセージを受信します。

2.socket_create() を通じてソケット接続を確立し、socket_send() またはソケット_write() を使用してメッセージを送信し、socket_recv() またはソケット_read() を使用してメッセージを送信します。

奇妙なことに、マニュアルに次の段落がありました: 「この拡張モジュールは実験的です。関数の名前を含むこのモジュールの動作や、このモジュールに関するその他のドキュメントは予告なく変更される可能性があります。PHP は将来のリリースで変更されます」 . この拡張モジュールは自己責任で使用するよう注意してください。「php4.0 ソケット通信はまだ完全に安定していないようです。

今日書いたクライアントはサーバーと2回通信する必要があります。上記の方法を使用してクライアントプログラムを作成したところ、通信が1回しかない場合、つまりPHPクライアントがメッセージを1回送信してからそれを受信することがわかりました。メッセージを返して接続を閉じます。どちらの方法でも関数を正しく迅速に実装できますが、最初の方法での最初の通信はすぐに終了しますが、2 回目の通信には数分かかりました。何度か試しましたが、プログラムの何が問題だったのか、接続に問題があったのかわかりません。ただし、2 番目の方法では、これら 2 つの通信を迅速に完了できませんでした。 !非常によくやりました。

最後に、2 番目の状況に基づいてクラスを作成しました

////////////////////////////// File Description //////////////////////////////////////////
//  Class Name            : socket
//  Version               : V1.0
//  Functional Outline    : create socket,and send message to server
//  Revision history      : 2004/12/15 First version created
//  Current               : 2004/12/15 Liu Yongsheng
//////////////////////////////////////////////////////////////////////////////////////////
class socket{
 var $socket; //socket 句柄
 var $sendflag = ">>>";
 var $recvflag = "<<<";
 var $response;
 var $debug = 1;
 function socket($hostname,$port){
  $address = gethostbyname($hostname);
  $this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
     $result =  socket_connect($this->socket,$address,$port);
  if($this->debug == 1){
   if ($result < 0) {
      echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "<br>";
   } else{
      echo "connect OK.<br>";
   }
  }   
 }
 function sendmsg($msg){
  socket_write($this->socket,$msg,strlen($msg));
  $result  = socket_read($this->socket,100);
  $this->response = $result;
  if($this->debug == 1){
      printf("<font color=#CCCCCC>%s $msg</fon><br>",$this->sendflag);
      printf("<font color=blue>%s $result</font><br>",$this->recvflag);
  } 
        return $result;
 }
 function close(){
  socket_close($this->socket);
 }
}
ログイン後にコピー

上記は、PHP テクノロジーの高度な PHP SOCKET テクノロジー研究の内容です。その他の関連記事については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。 !


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