gpt4 book ai didi

java - 解析UDP数据包后输出垃圾

转载 作者:行者123 更新时间:2023-11-30 07:29:24 25 4
gpt4 key购买 nike

我试图从 UDP 数据包中提取信息,但不断获得随机输出。有时我得到了我想要的东西,有时却没有。

这是我的代码:

private static void receivePacket()
{
try {
DatagramSocket socket = new DatagramSocket(port);
System.out.println("\n Listening...");

while(true)
{
// Create a packet
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);

// Receive packet
socket.receive(packet);
byte[] data = packet.getData();

// Parse the packet
parse(data, packet.getLength());

socket.send(packet);
}

} catch(Exception e) {
e.printStackTrace();
}
}

// Parse packets
private static void parse(byte [] data, int dataLength)
{
ArrayList<String> name = new ArrayList<String>()
String domain = "";

// Get ID
int id = ((data[0] & 0xff) << 8) + (data[1] & 0xff);
System.out.println("\n ID:\t\t" + id);

// Get domain name and number of bits for each word in domain
for(int i = 0; i < dataLength; i++)
{
// If the next bit is a letter then we know the current bit is the number of bits
if((data[i] <= ' ') || (data[i] > '~'))
{
try {
if((String.format("%c", data[i+1]).matches("^[a-zA-Z]$")))
{
int dSize = Integer.parseInt(String.format("%d", data[i]));
name.add(Integer.toString(dSize));
}

} catch (Exception e) {
//e.printStackTrace();
}
}
else
{
// If current bit is letter add to ArrayList
try {
if((String.format("%c", data[i]).matches("^[a-zA-Z]$")))
{
name.add(String.format("%c", data[i]));
domain += String.format("%c", data[i]);
}

} catch (Exception e) {
//e.printStackTrace();
}
}
}

System.out.println(" Domain:\t" + domain);
System.out.print(" Name:\t\t");
name.add("0");

for(int i = 0; i < name.size(); i++)
System.out.print("\'" + name.get(i) + "\' ");

System.out.println();
}

我使用dig命令dig @localhost -p 1299 test.mydomain.abc向服务器发送UDP数据包。这是我运行六次后的输出。每次的输出应如下(ID 会有所不同):

ID:           64666
Domain: testmydomainabc
Name: '4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a' 'i' 'n' '3' 'a' 'b' 'c' '0'

但是,从运行 #4 开始,情况并非如此: enter image description here

这完全是随机的,我不明白为什么。我正在 Java 和 Windows 10 上进行编码。如有任何帮助,我们将不胜感激,谢谢!

原始数据:

成功试用:'4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a' 'i' 'n ''3''a''b''c''0'

b7 01 20 00 01 00 00 00 00 00 01 04 测试 08 我的域名 03 a b c 00 00 01 00 01 00 00 ) 10 00 00 00 00 00 00 00

不成功:'-127' 'f' '4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a ' 'i' 'n' '3' 'a' 'b' 'c' '0'

81 f 01 20 00 01 00 00 00 00 00 01 04 测试 08 我的域名 03 a b c 00 00 01 00 01 00 00 ) 10 00 00 00 00 00 00 00

最佳答案

您在parse中的循环从0开始,可能应该从2开始。否则,ID 字节将包含在 Domain 解析中(或抛出一个被静默忽略的异常)

关于java - 解析UDP数据包后输出垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com