Итак, у меня есть очень простой тест, чтобы проверить, могу ли я отправлять данные с веб-страницы php в приложение Java, работающее на том же сервере.Отправлять данные из PHP в Java tcp listener
Java-приложение мертв прост, он просто слушает сокет TCP данных
import java.io.*;
import java.net.*;
class TCPServer
{
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("Received: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
connectionSocket.close(); //this line was part of the solution
}
}
}
Я попробовал два способа отправки и прочитать ответ с PHP, но никто не похоже на работу. Я получаю соединение ОК и данные, переданные в порядке, но сервер не печатает ничего и не реагирует ни с чем, так что я не знаю, почему он говорит, что это нормально :)
Метод 1
$host = "tcp://localhost";
$port = 6789;
$data = 'test' . PHP_EOL; //Adding PHP_EOL was the other part of the solution
$errstr = '';
$errno = '';
if (($fp = fsockopen($host, $port, $errno, $errstr, 3)) === FALSE)
echo "$errstr ($errno)";
else {
print 'SUCCESS!<br />';
fwrite($fp, $data);
while (! feof($fp)) {
echo fgets($fp, 4096);
}
fclose($fp);
}
Метод 2
$host = "localhost";
$port = 6789;
$data = 'test';
if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE)
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error());
else
{
echo "Attempting to connect to '$host' on port '$port'...<br>";
if (($result = socket_connect($socket, $host, $port)) === FALSE)
echo "socket_connect() failed. Reason: ($result) " . socket_strerror(socket_last_error($socket));
else {
echo "Sending data...<br>";
socket_write($socket, $data, strlen($data));
echo "OK<br>";
echo "Reading response:<br>";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
}
socket_close($socket);
}
РЕДАКТИРОВАТЬ
По-видимому, fsockopen() имеет проблемы с подключением к localhost из комментария, который я нашел в PHP fsockopen doesnt return anything, поэтому был изменен на 127.0.0.1, но все еще не работает.
К сожалению нет, но спасибо. Также попробовал «тест». PHP_EOL на всякий случай :) – Christian
Код такой, как вы его видите. Это вся страница php и вся страница java. – Christian
Пример, взятый из http://php.net/manual/en/function.fsockopen.php – Christian