新しいフォルダー

気になったことや勉強したことについて書いていきます

PHPの socket_create_listen と socket_create 関数について

現在PHPのソケットについて勉強中。

調べていてわかったことをメモっておく。間違っている可能性あり。

 

phpでソケット通信をする際の受け側で使用する場合は2パターンある。

 

1.socket_create_listenを使用する

2.socket_create, socket_bind, socket_listenを用いる

(socket_accept以降は共通なので省く)

 

簡単に説明すると

1.簡単にlisten状態にできるがすべてのインタフェースでlisten状態になる。

2.接続を受けれるインタフェースを指定できたりTCP/UDPIPV4/IPV6等の指定ができる

 

1のサンプルコード

$port = 9999;

$sock = socket_create_listen($port);
if(!$sock){
 echo 'ERROR_CREATE_LISTEN';

 exit;
}

$newSock = socket_accept($sock); 

2のサンプルコード

$port = 9999;

//ソケットの生成
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//バインド
if(!socket_bind($sock, '192.168.56.101', $port)){
 echo 'ERROR_BIND';
 exit;
}
//待ち受け可能状態
if(!socket_listen($sock)){
 echo 'ERROR_LISTEN';
 exit;
}

$newSock = socket_accept($sock);

 

2のsocket_createでIPやらTCPを指定しsocket_bindでインタフェースを指定できる

 

1の実行結果(netstat)

tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN

2の実行結果(netstat)

tcp        0      0 192.168.56.101:9999         0.0.0.0:*                   LISTEN