java - PHP Socket Java 消息交换

标签 java php sockets

我正在尝试在 PHP 页面和运行中的 Java 服务器之间建立通信。 只是通过套接字进行简单的字符串交换。

这是处理连接的线程的 Java 代码:

            InputStream in = clientSocket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));

                String request;

                if((request=br.readLine())!=null){
                System.out.println("got the following request: " + request);
                out.write(request +"\n");
                out.flush();

                out.close();
                in.close();
                }

我使用简单的 Java 客户端对其进行了测试,该客户端发送字符串然后接收结果并将其打印回来并且它有效。客户端和服务器都有相同的输出。

这是我的 PHP 代码:

$fp = @fsockopen ($host, $port, $errno, $errstr);

if($fp){
    fputs($fp, $str);
    //echo fgets($fp);
}

close($fp);

将字符串发送给服务器,服务器接收它。 但是一旦我用 fgets($fp) 取消注释该行,我就会被阻止,直到 1-2 分钟后发生某种超时。在那次封锁期间,我的服务器没有收到任何东西。 超时后我的服务器打印,它已收到该行,并且可能发送回响应,但是,PHP 代码不打印任何内容。

可能是什么问题?

提前谢谢你。

附言值得一提的是,我正在通过 AJAX 访问此网页,因此它会将结果“回显”到其他页面。

最佳答案

我个人更喜欢socket_* 函数。但无论哪种方式,您都可能错过了对终止字符的检查:

$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_connect($sock, $host, $port);

socket_write($sock, $str);

$response = '';
while($resp = socket_read($sock, 1024)) {
    if(!$resp)
        break;
    $response .= $resp;
    if(strpos($resp, "\n") !== false)
        break;
}

echo "Server said: {$response}";

关于java - PHP Socket Java 消息交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166182/

相关文章:

java.sql.SQLException : ORA-01000: maximum open cursors exceeded

java - 使用 jsoup 实例化标签对象

php - 如何使用jquery删除wordpress菜单中的空链接?

php报表工具

c - 在套接字 c 中,send() 优先于 receive()

java - 使用 Java 检索 MongoDb 嵌套文档的所有键

javascript - JQuery 自动完成链接

sockets - 在UDP套接字上使用sendto()/recvfrom()而不是connect()/send()/recv()的目的是什么?

c# - .NET 3.5 异步 System.Net.Sockets.Socket 停止数据流的原因是什么?

java - Dropwizard 在有效 GET 上返回 400