バインドソケット
機能バインドは、特定のアドレスとポートにソケットをバインドするために使用することができます。 connect関数に似たsockaddr_in構造体が必要です。今では、バインドが行われ
クイック例
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if(!socket_bind($sock, "127.0.0.1" , 5000))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
、ソケットを作るためにその時間は接続に耳を傾けます。特定のIPアドレスと特定のポート番号にソケットをバインドします。これにより、このポート番号に向けられたすべての着信データがこのアプリケーションによって確実に受信されるようになります。
これは、2つのソケットを同じポートにバインドすることができないことを明白にしています。この規則には例外がありますが、他のいくつかの記事ではそれを調べます。
は、私たちが行う必要があり、次のものが接続を待ち受けるあるポートにソケットをバインドした後に接続
の音を聞きます。このためには、ソケットをリスニングモードにする必要があります。機能socket_listen
は、ソケットをリスニングモードにするために使用されます。 bindの後に次の行を追加するだけです。
socket_listen関数の2番目のパラメータは、バックログと呼ばれます。これは、プログラムがすでにビジー状態の場合に「待機中」に保たれる着信接続の数を制御します。したがって、10を指定することによって、10の接続が処理待ちの状態であれば、11番目の接続要求は拒否されることを意味します。これは、socket_acceptをチェックした後、より明確になります。
今、新しい接続を受け入れる主要な部分があります。
はsocket_accept
が、このために使用される接続
関数を受け入れます。
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if(!socket_bind($sock, "127.0.0.1" , 5000))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
if(!socket_listen ($sock , 10))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode] $errormsg \n");
}
echo "Socket listen OK \n";
echo "Waiting for incoming connections... \n";
//Accept incoming connection - This is a blocking call
$client = socket_accept($sock);
//display information about the client who is connected
if(socket_getpeername($client , $address , $port))
{
echo "Client $address : $port is now connected to us.";
}
socket_close($client);
socket_close($sock);
出力
プログラムを実行します。それは ソケットは、ソケットがOK ソケットが着信接続を待機OK を聞くバインド を作成/var/www/server.php $ phpの...
はだから今、このプログラムは、ポート5000上の着信接続を待っているが表示されるはずです。このプログラムを閉じず、実行してください。 クライアントはこのポートで接続できます。これをテストするためにtelnetクライアントを使用します。それはすぐにlocalhostに接続され の$のtelnet localhostの5000 しようと127.0.0.1 ... が表示されますターミナルを開き、 の$のtelnet localhostの5000
を入力します。 エスケープ文字は '^]'です。 外部ホストによって接続が閉じられました。
とサーバーの出力は クライアント127.0.0.1が表示されます:36689は、今私たちに接続されています。
これで、クライアントがサーバーに接続していることがわかります。あなたが完璧に働くまで、上記の手順を試してみてください。
注
socket_getpeername機能は、特定のソケットを介してサーバに接続しているクライアントに関する詳細情報を取得するために使用されます。
これはどのように私は、SOAPコールのライブ内容を得るのを助けますか? –
これについてより明確にするために、PHPのリファレンスに従うことができます。 http://php.net/manual/en/function.http-get-request-body.php –
@NavnishBhardwajあなたが投稿したコードは、「タイムアウト」を伴う「SOAP応答のストリーミング」および/または"間隔"?私が今見ているのは問題を解決するものではなく、単にその質問に対する答えではありません。なぜあなたのコードが問題に役立つのかを説明してください。 –