2012-03-01 3 views
0

Я написал приложение 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 никогда не подключается.

Кроме того, это лучший метод для моих нужд ?? Спасибо.

+0

Вы проверили, есть ли какие-либо брандмауэры, блокирующие входящий запрос? – Asaph

+0

его мой домашний компьютер. Я прохожу через обычный беспроводной маршрутизатор. Кстати, если брандмауэры собираются убить это, то это может быть неправильный путь. Мои клиенты не разбираются в технологии, и мне нужно простое решение для пользователя. – rob345

+0

Возможно, у вас есть брандмауэр, предотвращающий доступ. Он может быть на уровне кабельного модема и/или дальше вверх по течению. И да, брандмауэры, вероятно, будут барьером в вашем дизайне. Вы должны пересмотреть дизайн. Вместо того, чтобы нажимать данные клиенту, сделайте клиентом опрос сервера на наличие обновлений. – Asaph

ответ

0

Код, который вы включаете, работает, если машина php-сервера может подключаться к клиентской машине java. В вашем случае, что это по всему Интернету, это означает, что клиентский компьютер java должен иметь IP-адрес, доступный для публики. После этого присвойте этот IP $ HOST, тогда код будет работать нормально.

Предполагая, что ни один клиент не может иметь общедоступный IP-адрес, я считаю, что лучший способ - заставить ваш Java-клиент разговаривать с вашим сервером PHP с помощью запроса HTTP-запроса. Клиент java, действуя как веб-браузер, отправляет HTTP-запрос и получает HTTP-ответ, содержащий данные, необходимые вашему java-клиенту. И когда число клиентов увеличивается до уровня, который не может обрабатывать сервер PHP, вы можете его масштабировать. Хотя у меня не было опыта, масштабирование сервера PHP в наши дни не является чем-то необычным.