#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:
расширение =сокеты