Подключение PHP-скрипта к Java с помощью сокета

#java #php #sockets

#java #php #сокеты

Вопрос:

Я пытаюсь разместить веб-сервер с помощью небольшого php-скрипта, который отправляет одну строку в Java-программу (на локальном компьютере) и получает одну строку обратно из программы. После этого другой клиент должен иметь возможность подключиться. В настоящее время я получаю некоторые тайм-ауты с помощью php-скрипта и не могу понять, почему…

Java

 public void start() {
        try {
            ServerSocket serversocket = new ServerSocket(port);
            while (true) {
                Socket client = serversocket.accept();

                PrintWriter out = new PrintWriter(client.getOutputStream(), true);
                BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));


                String[] request = in.readLine().split(";");
                String answer = "";

                ...getting the answer...

                out.println(answer   "n");
                out.close();
                in.close();
                client.close();
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
  

PHP

 <?php
$fp = fsockopen(getHostByName(getHostName()), 77777, $errno, $errstr, 5);
if (!$fp) {
    echo "$errstr ($errno)<br />n";
} else {
    fwrite($fp, "testn");
    echo fgets($fp, 128); 
    fclose($fp);
}
?>
  

Комментарии:

1. Я предполагаю, что буфер потока удерживается на выходе с одной или другой стороны. Я бы попробовал очищать после каждой операции записи. Может быть, после fwrite в PHP?

Ответ №1:

Хорошо, я думаю, что у меня был постоянный цикл в части «получение ответа». Теперь все работает нормально. В любом случае, вот мой новый PHP-код:

 <?php
    $sock = socket_create(AF_INET,SOCK_STREAM,0) or die("Cannot create a socket");
    socket_connect($sock,getHostByName(getHostName()),7777);
    $data = "arg1;arg2;arg3n";
    socket_write($sock, $data, strlen($data));
    echo socket_read($sock, 2048);
    socket_close($sock);
?>
  

И обязательно добавьте / раскомментируйте это в свой файл php.ini:

расширение =сокеты