【问题标题】:Send byte array from PHP to Java Socket将字节数组从 PHP 发送到 Java Socket
【发布时间】:2011-11-14 22:15:16
【问题描述】:

我有一个 java 服务器在一个 Socket 上监听。我可以在这个 java 服务器套接字和附加到它的 java 客户端套接字之间发送和接收数据。

现在我想将 PHP 连接到 java 服务器(通过 java 套接字),但似乎无法将字节数组(使用 pack())发送到 java。

$socket = fsockopen("127.0.0.1", 5477) or die("Error creating socket");

$output = pack("i3", 2, 1, 1); 
fwrite($socket, $output, 3);

在 java 端,当我尝试调用 in.readInt()(其中 inDataInputStream)时,我得到一个 java.io.EOFException

if (in.available() != 0)
{
    //read the data
    int len = in.readInt(); //length of the buffer
}

那么问题是什么? / 我是否以正确的方式解决这个问题,或者有更好的方法吗?

【问题讨论】:

    标签: java php sockets


    【解决方案1】:

    您只向套接字写入 3 个字节,但 readInt() 总是 读取 4 个字节来构造 java int 值。

    所以,你自然会在第三个字节后得到EOFException

    【讨论】:

    • 哦,我明白了。所以我应该把它改成:fwrite($socket, $output, 12)?我需要颠倒java中的位顺序吗? (就像我现在读到的长度一样,我得到 33554432)
    • @Andrew。 Java DataInputStream 使用大端字节序,所以如果你想使用它,你必须在 PHP 端对数据进行相应的打包。
    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多