PHP / Java Sockets - Странная ошибка? - PullRequest
1 голос
/ 12 июля 2011

Java-код:

package servermonitor;

import java.io.*;
import java.net.*;

public class CommandListener extends Thread
{
    public int count = 0;
    public void run()
    {
            try
            {
                ServerSocket server = new ServerSocket(4444);
                while(true)
                {
                    System.out.println("listening");
                    Socket client = server.accept();
                    System.out.println("accepted");
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    System.out.println("got reader");
                    String data = "";
                    String line;
                    while((line = in.readLine()) != null)
                    {
                        System.out.println("inloop");
                        data = data + line;
                    }
                    System.out.println("RECIEVED DATA: " + data);
                    in.close();
                    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                    count++;
                    out.write("gotcha: " + count + "\\n");
                    out.flush();
                }

            }
            catch(IOException ex)
            {
                System.out.println(ex.getMessage());
            }

    }

 }

Java-консоль (когда я получаю доступ к следующему сценарию PHP):

listening
accepted
got reader

PHP-код:

<?php
$PORT = 4444; //the port on which we are connecting to the "remote" machine
$HOST = "localhost"; //the ip of the remote machine (in this case it's the same machine)

$sock = socket_create(AF_INET, SOCK_STREAM, 0) //Creating a TCP socket
or die("error: could not create socket\n");

$succ = socket_connect($sock, $HOST, $PORT) //Connecting to to server using that socket
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, strlen($text) + 1) //Writing the text to the socket
or die("error: failed to write to socket\n");

$reply = socket_read($sock, 10000) //Reading the reply from socket
or die("error: failed to read from socket\n");

echo $reply;
?>

Когда яперейдите на страницу PHP, она загружается навсегда.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 12 июля 2011

Сторона Java ожидает ввода новой строки. Вы не отправляете один, поэтому readLine никогда не заканчивается.

Кроме того, readLine не будет возвращать ноль, пока сокет не будет закрыт или не произойдет исключение (например, ошибка ввода-вывода). Вам нужно вернуть некоторые данные, как только вы прочитаете строку, если ваш протокол работает таким образом.

0 голосов
/ 12 июля 2011

Как уже было сказано, вам нужно закрыть сокет, чтобы readLine вернула ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...