0

PHP でソケットを開き、メッセージを送信します。このソケットで Java のメッセージを読み取ろうとすると、接続は確立されますが、メッセージは null ですか?

何か助けはありますか?PHP クライアントを使用して Java ソケット サーバーからの応答を読み取ることができません。これは同じ問題ですが、メッセージに \n を入れます。

  // 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";

そして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);

Java コードは、サーバーへのゲートウェイのように動作します。

4

1 に答える 1

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

これは

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

または、Java が末尾の null に関心がないため、$length-1 でさえも。

于 2012-10-29T22:09:58.007 に答える