【问题标题】:Communicate between Java server and PHP clientJava服务器和PHP客户端之间的通信
【发布时间】:2015-03-25 13:37:07
【问题描述】:

我试图在 Java 服务器和 PHP 客户端之间创建套接字通信。我唯一得到的是连接,但是从 PHP 客户端收到的奇怪消息(混乱的代码)。 下面是Java服务器的代码:

public class TestServer extends Thread {
private ServerSocket serverSocket;

public TestServer(int port) throws IOException {
    serverSocket = new ServerSocket(port);
}

public void run() {
    while (true) {
        try {
            System.out.println("Waiting for client on port " + serverSocket.getLocalPort()
                    + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            InputStreamReader inputStream = new InputStreamReader(server.getInputStream());
            BufferedReader input = new BufferedReader(inputStream);
            DataOutputStream response = new DataOutputStream(server.getOutputStream());

            String command = input.readLine();
            System.out.println(command);
            server.close();
        } catch (SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
        } catch (IOException e) {
            e.printStackTrace();
            break;
        }
    }
}

public static void main(String[] args) {
    int port = Integer.parseInt(args[0]);
    try {
        Thread t = new TestServer(port);
        t.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

以及PHP客户端中的代码:

 <?php


            $ip="192.168.1.6";     //Set the TCP IP Address to connect too
            $port="9999";        //Set the TCP PORT to connect too



                //Connect to Server
                $socket = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr, 30);

                    if($socket) {
                        //Start SSL
                        stream_set_blocking ($socket, true);
                        stream_socket_enable_crypto ($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT);
                        stream_set_blocking ($socket, false);

  $command = array("autospray", "on");
  $sock= $socket;
  $msg = $command;

function write(&$sock,$msg) {
    //$msg = "$msg\n\0";
    $length = strlen($msg);
    while(true) {
        $sent = @socket_write($sock,$msg."\n" ,$length)  or die("Could not write output\n");

@socket_shutdown($sock, 2);
@socket_close($sock);


        if($sent === false) {
            return false;
        }
        if($sent < $length) {
            $msg = substr($msg, $sent);
            $length -= $sent;
            print("Message truncated: Resending: $msg");
        } else {
            return true;
        }
    }
    return false;
}


}




                            ?> 

【问题讨论】:

  • 奇怪的信息是什么?你可以更好地描述没有按预期工作的地方
  • 这是乱码。我贴不出来对不起。

标签: java php sockets


【解决方案1】:

在 PHP 中,您使用:stream_socket_enable_crypto() 加密套接字,因此 JAVA 服务器将在 inputStream 中接收加密流。 您需要对流进行解密才能获得真正的消息。

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多