Я написал приложение java на стороне клиента, которое обменивается данными через http на php-сервер. Мне нужно реализовать слушателя на стороне java (клиента), чтобы отвечать на запросы, сделанные сервером php. В настоящее время приложения Java поражают текстовый файл на сервере, который обновляется каждую минуту.java php communication
Это работает нормально, но теперь количество клиентских java-приложений растет, и эта примитивная система начинает разрушаться.
Каков наилучший способ изменить это? Я попробовал прослушиватель JavaServerSocket в клиентском приложении java, но не могу заставить это работать. У меня возникли проблемы с завершением общения. Все примеры в Интернете используют localhost как пример ip-адреса, а мой php-сервер удален.
Нужно ли мне получить IP-адрес клиентской машины и отправить ее на сервер php, чтобы php знал, куда отправить сообщение? Вот код Java ... Это все через Интернет ...
public class MyJavaServer
{
public static void main(String[] args)
{
int port = 4444;
ServerSocket listenSock = null; //the listening server socket
Socket sock = null; //the socket that will actually be used for communication
try
{
System.out.println("listen");
listenSock = new ServerSocket(port);
while (true)
{
sock = listenSock.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
String line = "";
while ((line = br.readLine()) != null)
{
bw.write("PHP said: " + line + "\n");
bw.flush();
}
//Closing streams and the current socket (not the listening socket!)
bw.close();
br.close();
sock.close();
}
}
catch (IOException ex)
{
System.out.println(ex);
}
}
}
... и вот PHP
$PORT = 4444; //the port on which we are connecting to the "remote" machine
$HOST = "ip address(not sure here)"; //the ip of the remote machine(of the client java app's computer???
$sock = socket_create(AF_INET, SOCK_STREAM, 0)
or die("error: could not create socket\n");
$succ = socket_connect($sock, $HOST, $PORT)
or die("error: could not connect to host\n");
$text = "Hello, Java!\n"; //the text we want to send to the server
socket_write($sock, $text . "\n", strlen($text) + 1)
or die("error: failed to write to socket\n");
$reply = socket_read($sock, 10000, PHP_NORMAL_READ)
or die("error: failed to read from socket\n");
echo $reply;
Это просто не работает. Приложение java прослушивает, но скрипт php никогда не подключается.
Кроме того, это лучший метод для моих нужд ?? Спасибо.
Вы проверили, есть ли какие-либо брандмауэры, блокирующие входящий запрос? – Asaph
его мой домашний компьютер. Я прохожу через обычный беспроводной маршрутизатор. Кстати, если брандмауэры собираются убить это, то это может быть неправильный путь. Мои клиенты не разбираются в технологии, и мне нужно простое решение для пользователя. – rob345
Возможно, у вас есть брандмауэр, предотвращающий доступ. Он может быть на уровне кабельного модема и/или дальше вверх по течению. И да, брандмауэры, вероятно, будут барьером в вашем дизайне. Вы должны пересмотреть дизайн. Вместо того, чтобы нажимать данные клиенту, сделайте клиентом опрос сервера на наличие обновлений. – Asaph