2013-05-30 3 views
0

Итак, у меня есть очень простой тест, чтобы проверить, могу ли я отправлять данные с веб-страницы 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, но все еще не работает.

ответ

0
  • Попробуйте изменить $data = 'test' к $data = "test\n" и посмотреть, если это помогает.
  • Закрыть сокет на сервере, когда ваш сделано в противном случае клиент будет блокировать в while цикл ожидания для получения дополнительной информации:

    outToClient.writeBytes(capitalizedSentence); 
    connectionSocket.close() 
    
+0

К сожалению нет, но спасибо. Также попробовал «тест». PHP_EOL на всякий случай :) – Christian

+0

Код такой, как вы его видите. Это вся страница php и вся страница java. – Christian

+0

Пример, взятый из http://php.net/manual/en/function.fsockopen.php – Christian