Java和PHP套接字通信问题

时间:2016-07-19 22:39:42

标签: java php sockets

我正在尝试建立一个我正在与Java程序进行通信的网站。我对任何形式的套接字都很陌生,所以我在让Java程序将响应发送回我的网站时遇到了问题。这是我当前的Java代码:

while(true) {
    ServerSocket socket = null;
    Socket connection = null;
    InputStreamReader inputStream = null;
    BufferedReader input = null;
    DataOutputStream response = null;
    System.out.println("Server running");
    try {
        socket = new ServerSocket(4400);
        while(true) {
            connection = socket.accept();
            inputStream = new InputStreamReader(connection.getInputStream());
            input = new BufferedReader(inputStream);
            String command = input.readLine();
            System.out.println("command: " + command);
            if(command.equals("restart")) {
                break;
            } else if(command.equals("requeststatus")) {
                String reply = "testing";
                System.out.println(reply);
                response = new DataOutputStream(connection.getOutputStream());
                response.writeUTF(reply);
                response.flush();
            }
        }
    } catch(IOException e)  {
        e.printStackTrace();
    } finally {
        if(socket != null) {
            try {
                socket.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
        if(connection != null) {
            try {
                connection.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
        if(inputStream != null) {
            try {
                inputStream.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
        if(input != null) {
            try {
                input.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
        if(response != null) {
            try {
                response.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("Server Closing");
}

我目前的PHP代码:

<?php
function send($message)  {
    $address = 'localhost';
    $port = 4400;
    $socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
    try {
        socket_connect($socket, $address, $port);
        $status = socket_sendto($socket, $message, strlen($message), MSG_EOF, $address, $port);
        if($status != false)  {
            // If it worked then wait for a response?
            // This is where the problem is at
            if($next = socket_read($socket, $port)) {
                echo $next;
            }
            return true;
        }
        return false;
    } catch(Exception $e)  {
        return false;
    }
}
if(send("requeststatus")) {
    echo "Worked";
}
?>

当我启动程序并加载网页时,页面会不断加载而不会打印任何内容。我猜测PHP会运行所有内容,然后在脚本完成后我的浏览器中显示结果并且我的脚本被阻塞了#34;在等待回复?如果是这样,我将如何让我的PHP脚本发送&#34; requeststatus&#34;到我的Java程序并让我的Java程序响应?最终目标是在我的网站上显示来自Java程序的响应。

此外,我非常确定我写这个系统的效率低,错误。编写此类系统的正确方法是什么?有小费吗?谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

String command = input.readLine();

等待换行符或换行符结束。您永远不会发送新行,如果您关闭流,则无法写入输出。

所以基本上为你的消息添加换行符。