Связь между Java-сервером и PHP-клиентом

0

Я пытался создать связь сокетов между сервером Java и клиентом PHP. Единственное, что я получил, это соединение, но странное сообщение (messy code), полученное от 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;
}


}




                            ?> 
  • 0
    а странные сообщения есть? Вы могли бы описать лучше, что не работает, как ожидалось
  • 0
    Это грязный код. Я не могу вставить это. Сожалею.
Теги:
sockets

1 ответ

0
Лучший ответ

В PHP вы шифруете сокет с помощью: stream_socket_enable_crypto(), поэтому сервер JAVA получит зашифрованный поток в inputStream. Вам нужно расшифровать поток, чтобы получить реальное сообщение.

  • 0
    Большое спасибо. Задача решена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню