У меня есть работающий сокет Java, но мне нужна помощь в подключении к нему с помощью PHP.
Моя проблема: я могу подключиться к сокету Java от клиента Java и отправлять / получать сообщения, но когда я пытаюсь подключиться к тому же сокету с помощью PHP, он не будет подключаться.
Это то, что у меня есть для сокета в цикле while: (имейте в виду, что эта часть работает)
Socket socket = serverSocket.accept();
System.out.println("Got connection");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String cmd = in.readLine();
System.out.println("Received: " + cmd);
String response = "It worked. Received: " + cmd;
out.println(response);
...
И просто чтобы показать другую половину, которая работает, это клиент:
Socket socket = new Socket("<ip>", port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("test msg");
out.flush();
System.out.println("Sent message");
String r = in.readLine();
System.out.println("Response: " + r);
Теперь для части, которая не работает.
Вот что я делаю, чтобы попытаться соединиться с PHP:
$s = fsockopen('<ip>', $port, $errno, $errstr, 25);
if (!$s) {
echo 'Error: '.$errstr;
die;
}
Запустив эти выводы: «Ошибка: соединение отказано»
Кто-нибудь знает, как я могу диагностировать, почему PHP не может подключиться, но может клиент Java? Они оба получают доступ к сокету извне, и, поскольку клиент Java может подключиться, он не заблокирован. Какой протокол я забыл установить?
Я посмотрел на десятки других людей с тем же вопросом, но никто не дал ответа.
Вы смотрели в php.ini, разрешен ли fsockopen?
1 、 php.ini, ищите строку: disable_functions = fsockopen
2 、 php.ini, см. Allow_url_fopen = On или allow_url_fopen = Off
Других решений пока нет …