2016-09-05 12 views
0

私はこのエラーを得た:はsocket_select()ではない有効なソケット

Warning: socket_select(): supplied argument is not a valid Socket resource in /volume1/web/is/xxxx/listen-new.php on line 12 PHP Warning: socket_select(): supplied argument is not a valid Socket resource in /volume1/web/is/xxxx/listen-new.php on line 12 this my snippet code

私のコードは次のとおりです。

$port = $this->port; 
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1); 
    socket_bind($sock, 0, $port); 
    socket_listen($sock); 
    $this->clients[] = $sock; 
    $data = array();   
    while (true) { 
     $read = $this->clients; 
     $write = array(); //NULL 
     $except = array();//NULL 
     $sckt = socket_select($read, $write, $except, 0); 
     if($sckt === false){ 
      echo "socket_select() failed, reason: " . 
        socket_strerror(socket_last_error()) . "\n"; 
     } 
     elseif($sckt > 0) { 
      if (in_array($sock, $read)) { 
       $this->clients[] = $newsock = socket_accept($sock); 
       //var_dump($this->gps); 
       socket_write($newsock, "Connected\n"); 
       //var_dump($this->gps); 
       /**try{ 
        socket_getpeername($newsock, $ip); //error 
        echo "New client connected: {$ip}\n";    
       } 
       catch(Exception $e){ 
        echo "error : $e->getMessage()\n"; 
       }**/ 
       $key = array_search($sock, $read); 
       unset($read[$key]); 
      }   
      foreach ($read as $read_sock) { 
       $data = @socket_read($read_sock, 2048);    
       if ($data === false) { 
        $gpsdisc = array_search($read_sock, array_column($this->gps, 'pid')); 
        $key = array_search($read_sock, $this->clients); 
        unset($this->clients[$key]); 
        unset($this->gps[$gpsdisc]); 
        echo "client disconnected.\n"; 


        continue; 
       } 
       else{ 
        $data = trim($data); 
        if (!empty($data)) { 
         var_dump($data); 
         $buf = bin2hex($data); 
         $start = substr($buf, 0,4);  
         if($start=="7878"){ 
          $protocol = substr($buf, 6,2);       
          if($protocol=="01"){ 
           $imei = substr($buf, 8,16); 
           $cariGPS = $this->cariGPS($imei); 
           if($cariGPS!=NULL){ 
            $this->setGPS($imei,$read_sock,$cariGPS); 
            $reply = $this->authLogin($data); 
            $rep = hex2bin("$reply"); 
            socket_write($read_sock, $rep, strlen($rep)); 
           } 
           else 
            echo "$imei salah"; 
          } 
          elseif($protocol=="15"){ 
           //echo "$buf\n"; 
           $this->reply($data); 
          } 
          elseif($protocol=="12"){ 
           $hex12 = bin2hex($data); 
           //echo "$hex12\n"; 
          } 
          else{ 
           $hex12 = bin2hex($data);        
           echo "$hex12\n"; 
          } 

          echo "$protocol\n"; 
         } 
         else{ 
          if($data=="where"){ 
           //echo $data."\n"; 
           $this->where($this->gps);         
          } 
          elseif($data=="quit"){ 
           $gpsdisc = array_search($read_sock, array_column($this->gps, 'pid')); 
           unset($this->gps[$gpsdisc]); 
           socket_close($read_sock); 
           $key = array_search($read_sock, $this->clients); 
           unset($this->clients[$key]); 
          } 
          else{ 
           echo "command not found\n"; 
          } 
         } 

        } 
       }    
      } 
     } 
    } 
    socket_close($sock); 

PS私も$write = null$except = null

があります変更しなければなりませんでしたこのための任意のソリューションですか?

答えて

0

サーバーコードのみを提供しているようですが、クライアントコードは省略しています。あなたはクライアントのコードを投稿できますか?私は問題がそこにあると思う。私のテストクライアント(私はsocket_createを使用していました)では、報告している問題を再現できません。 また私のphp7(あなたが好奇心が強い場合)です。 これはあなたのためにいくつかのヒントを持っていることがあります。Socket_read() says "not a valid resource"

+0

この私のクライアントコード http://pastebin.com/YCpEzadi – akbar

+0

ねえ、クライアントのバージョンは、私のシステムでOK取り組んでいる - 少なくとも、私は「ありません得ていないのです有効なソケットリソース "msg。注意してください - 完全なクラス定義が最初の投稿に含まれていないため、テスト中にクラス変数を削除/簡略化しました。最初の完全なファイルを投稿できますか?クライアントとサーバーをどのように実行しているか、テスト環境についての詳細はどうしたらいいですか?ありがとう。 –

+0

私のサーバコードhttp://pastebin.com/339cPVeL – akbar

関連する問題