2012-10-29 3 views
0

J'ouvre un socket en php et j'envoie un message. Quand j'essaye de lire le message dans Java dans cette prise la connexion est établie mais le message est nul?Message socket PHP null

Une aide? Cannot read response from Java socket server using PHP client c'est le même problème que j'ai mais je le mets dans le message.

// variables 
     $host = gethostbyname('localhost'); 
     $port = 4444; 
     $message = $host." list\n\0"; 

     // create socket 
     if (!($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) { 
      $errorcode = socket_last_error(); 
      $errormsg = socket_strerror($errorcode); 
      die("Couldn't create socket: [$errorcode] $errormsg \n"); 
     } 
     echo "Socket created!\n"; 

     // connect 
     if (!socket_connect($sock, $host, $port)) { 
      $errorcode = socket_last_error(); 
      $errormsg = socket_strerror($errorcode); 
      die("Couldn't connect: [$errorcode] $errormsg \n"); 
     } 
     echo "Connection established!\n"; 
     echo $message; 
     $length = strlen($message); 
     // get room info - send message 
     while(true){ 
      $sent=sock_write($sock, $message, 1024); 
      if ($sent===false) { 
       $errorcode = socket_last_error(); 
       $errormsg = socket_strerror($errorcode); 
       die("Couldn't send data: [$errorcode] $errormsg \n"); 
      } 
      // Check if the entire message has been sented 
       if ($sent < $length) { 

       // If not sent the entire message. 
       // Get the part of the message that has not yet been sented as message 
       $st = substr($msg, $sent); 
       $message= $st; 

       // Get the length of the not sented part 
       $length -= $sent; 

      } else { 

       break; 
      } 


     }   

     echo "Message sent!\n"; 

et le côté java

while (true) { 

     try { 

      socket = new ServerSocket(4444); 


     } catch (UnknownHostException e) { 
      System.err.println("Dont know about host: localhost."); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection to localhost"); 
      System.exit(1); 
     } 

     try { 

      clientSocket = socket.accept(); 
      System.out.printf("Connected!\n"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 

      PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); //object to send data 
      BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); //object to read data 
      String inputLine, outputLine; 
      inputLine = in.readLine(); //read data 

      System.out.println(inputLine); 

Le code Java fonctionne comme une passerelle vers le serveur.

+1

Pourriez-vous donner plus de détails? Les parties d'envoi et de réception du code seraient très utiles. – Kosi2801

+0

Vous devrez fournir le code du serveur et des classes client que vous utilisez. Sinon, nous ne serons pas en mesure de vous aider –

Répondre

0
$sent=sock_write($sock, $message, 1024); 

Cela devrait être

$sent=sock_write($sock, $message, $length); 

Ou même longueur $ 1 Java n'est pas intéressé par le nul de fuite.

+0

ce n'est pas le problème aussi –