2017-06-22 8 views
1

私はPHPソケットサーバーを作成しています。私は見つけたsocket_recv()は問題を引き起こしている、それは1つのコンピュータを接続することができます。しかし、私がコメントアウトした場合socket_recvそれは正常に動作します。しかし、ソケットサーバーでもデータを受け取る必要があります。ソリューションを見つけるのを手伝ってください。また、コードに間違いがあることを指摘してください。 JQueryの部分は正常に動作しているため、ここでは印刷しませんでした。PHP:socket_recv()によってソケットサーバーが中断されました。

<?php 
    set_time_limit(0); 

    $host = '172.28.4.5'; 
    $port = 10000; 
    $null = NULL; 

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); 
    socket_bind($socket, $host, $port); 
    socket_listen($socket); 
    $clients = array($socket); 

    while(true) { 

     $new_socket = socket_accept($socket);//Accepting new connection/socket/client if any 
     $clients[] = $new_socket;//Adding the new client/socket/connection to client array 

     $header = socket_read($new_socket, 1024); 
     perform_handshaking($header, $new_socket, $host, $port); 

     /* If I want to notify if new connection is established**/ 
     socket_getpeername($new_socket, $ip); 
     $message = "Welcome to WebSocket $ip"; 

     $array = array(
       'message' => $message 
      ); 
     $message = mask(json_encode($array));  
     write_to_socket($message); 

     $found = array_search($socket, $clients); 
     unset($clients["$found"]); 

     //Going through each client 
     foreach($clients as $client) { 

      //Getting messages with loop how many packages for each client has 
      while(socket_recv($client, $buf, 1024, 0) >= 1) { 

         $array = json_decode(unmask($buf)); 
         print_r($array); 
       } 
     } 
    } 
} 
?> 
+0

あなたはもっとメッセージをくれますか?どうしましたか? –

+0

私は1台のコンピュータにしか接続できませんでした。私は*** socket_recv()***を使用しない場合、その正常に動作します。 –

答えて

0

コードは、あなたが配列に耳を傾けたソケットを追加しているようです

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); 
    socket_bind($socket, $host, $port); 
    socket_listen($socket); 
    //$clients = array($socket); <---- here 

    while(true) { 

間違っている、あなたが耳を傾け、ソケットから受信したデータはならないようです。

+0

*** socket_recv ***部分を除いてすべて動作しています。 –

+0

リッスンされたソケットを受け取るためエラーです。 –

+0

あなたが言ったように、まだ同じ問題がありました。 –

関連する問題