1

我正在使用 DatagramSocket 和 DatagramPacket 在 java 中开发一个聊天应用程序。接收到的数据包是以字节为单位的。但我不知道如何切掉未使用的字节这是代码:-

String s,pack[];

byte[] data=new byte[100];

data=dp.getData();//dp is instance of DatagramPacket

s=new String(data)

pack=s.split("-");//Username-ConnectionProtocol-IPaddress

在此代码中,最后一次拆分获取 IP 地址以及几乎以字节为单位的未使用数据。所以我需要一个解决方案来以字节为单位切断未使用的数据。像 127.0.0.1[][][][][][][][][].....

我尝试使用 Pack 来切割字符串,subtstring()但它的长度会有所不同。所以我需要一些帮助来解决这个问题。

4

2 回答 2

2
  • 您不需要使用 初始化数据new byte[100],因为dp.getData()会丢弃您分配的 100 个字节。
  • 如果发送方写入的数据多于必要的数据,则无法知道应该截断多少字节。发件人应该指出他发送了多少字节,或者你应该想出一个启发式方法,让你从有用的字节中分辨出无用的字节。

例如,如果你知道未使用的字节总是在数据包的末尾,并且它们总是设置为零,你可以使用这段代码来设置你的字符串:

data=dp.getData();
int pos = data.length-1;
while (pos != 0 && data[pos] == 0) {
    pos--;
}
s=new String(data, 0, pos);
于 2012-06-25T12:54:28.663 回答
1

假设数据包的未使用部分为零,您可以使用这种代码:

static String[] parsePacket(byte[] p) {
  return new String(p, 0, len(p)).split("-");
}
static int len(byte[] p) {
  for (int i = 0; i < p.length; i++) if (p[i] == 0) return i;
  return p.length;
}
于 2012-06-25T12:56:18.873 回答