如何在 Java 中将字符串和二进制文字发送到服务器
How to send a string and binary literals to a server in Java
我有一个情况,我有一个字符串和三个二进制文字,我需要添加到一个字节数组以发送到服务器。
客户:
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 ÿ ÿÿ@
字符串工作正常 - 但二进制值不工作是不是我缺少一些基本的东西?
您缺少对二进制数据和字符数据之间的基本理解。
字符串是字符数据,这意味着它们是可显示的。二进制数据不一定是可显示的(尤其是在这种情况下,因为您知道您不是在写入字符数据)。
putInt()
方法将 4 个字节放入缓冲区。使用 getInt()
阅读它,然后您将获得一个可以显示的值。
编辑:
您还使用 byte[] sendDataBytes = new byte[bb.capacity()];
创建了一个 1024 字节的数组并通过网络发送它。您永远不会知道 1024 字节中有多少是实际数据,有多少只是空垃圾。
是的,您在这里遗漏了很多基础知识,而且它太宽泛了,无法在答案中解决所有问题。
我有一个情况,我有一个字符串和三个二进制文字,我需要添加到一个字节数组以发送到服务器。
客户:
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 ÿ ÿÿ@
字符串工作正常 - 但二进制值不工作是不是我缺少一些基本的东西?
您缺少对二进制数据和字符数据之间的基本理解。
字符串是字符数据,这意味着它们是可显示的。二进制数据不一定是可显示的(尤其是在这种情况下,因为您知道您不是在写入字符数据)。
putInt()
方法将 4 个字节放入缓冲区。使用 getInt()
阅读它,然后您将获得一个可以显示的值。
编辑:
您还使用 byte[] sendDataBytes = new byte[bb.capacity()];
创建了一个 1024 字节的数组并通过网络发送它。您永远不会知道 1024 字节中有多少是实际数据,有多少只是空垃圾。
是的,您在这里遗漏了很多基础知识,而且它太宽泛了,无法在答案中解决所有问题。