如何使用Java将字符串和二进制文字发送到服务器

时间:2015-08-18 07:53:40

标签: java sockets binary bytearray bytebuffer

我有一种情况,我有一个字符串和三个二进制文字我需要添加到字节数组发送到服务器。

客户:

    String arbitrary = "/AN/ARBITRARY/STRING";
    int b_f32b = 0b00000000000000000000000011111111;
    int b_seconds = 0b00000000000000001111111111111111;
    int b_fraction = 0b01000000000000000000000000000000;

    ByteBuffer bb = ByteBuffer.allocate(1024);

    bb.put(arbitrary.getBytes());
    bb.putInt(b_f32b);
    bb.putInt(b_seconds);
    bb.putInt(b_fraction);

    bb.clear();
    byte[] sendDataBytes = new byte[bb.capacity()];
    bb.get(sendDataBytes, 0, sendDataBytes.length);

    DatagramPacket sendPacket = new DatagramPacket(sendDataBytes, sendData.length, IPAddress, 7000);
    clientSocket.send(sendPacket);

在服务器上:

        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        String sentence = new String( receivePacket.getData());

结果是: 收到:/ AN / ARBITRARY /STRINGÿÿ@

String工作正常 - 但二进制值不存在我缺少的基本值吗?

1 个答案:

答案 0 :(得分:0)

您错过了二进制和字符数据之间的基本理解。

字符串是字符数据,意味着它们可以显示。二进制数据不是必需的(特别是在这种情况下,因为你知道你没有写字符数据)。

putInt()方法在缓冲区中放入4个字节。使用getInt()阅读,然后您将获得可以显示的值。

编辑:

您还要创建一个带有byte[] sendDataBytes = new byte[bb.capacity()];的1024字节数组,并通过网络发送。你永远不会知道1024个字节中有多少是实际数据,多少只是空垃圾。

是的,你在这里错过了很多基础知识而且它的范围太宽,无法解决答案中的所有内容。