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

标签 java sockets binary bytearray bytebuffer

我遇到的情况是,我需要将一个字符串和三个二进制文字添加到Byte数组中才能发送到服务器。

客户端:

    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/任意/STRINGÿ@

字符串工作正常-但二进制值不存在我所缺少的基本知识?

最佳答案

您缺少二进制和字符数据之间的基本理解。

字符串是字符数据,表示它们是可显示的。二进制数据不是必需可显示的(特别是在这种情况下,因为您知道您不是在写字符数据)。
putInt()方法将4个字节放入缓冲区。使用getInt()读取它,然后您将获得一个可以显示的值。

编辑:

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

是的,您在这里缺少很多基础知识,而且范围太广,无法解决所有问题。

关于java - 如何使用Java将字符串和二进制文字发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32066665/

相关文章:

Java 1.6 升级

java - 从输入中转义 unicode

python - 如何通过 Python Socket 发送原始 XML 而不是字节数据?

java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?

haskell - 获取函数的地址(不与 C 接口(interface))

c++ - 二进制文件 I/O 问题

java - 如何处理序列化大对象时发生的StackOverflowError?

java - 如何使用 hibernate 将输出列合并为一列?

c - c语言的多线程客户端-服务器聊天应用程序

sockets - UDP(单播客户端)是否可以从一个sendto()之外的其他服务器接收revfrom()?