gpt4 book ai didi

Java 数据包困惑

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:15 26 4
gpt4 key购买 nike

我正在用 Java 编写服务器程序。这是我的主线程代码:

public class EntryThread extends Thread {

volatile byte[] toSend;

public EntryThread() {

}

public void TreatRequest(byte[] data, InetAddress IPAddress)
{
try {
switch (data[0])
{
case 0: // ping
toSend = new byte[] { (byte) 255, data[1], (byte) 255};
Server.serverSocket.send(new DatagramPacket(toSend, 3, IPAddress, 17550));
break;
case 2:
break;
}
} catch (Exception e)
{
System.out.println("Exception because of a packet malformation issue. You can ignore it.");
e.printStackTrace();
}
}

public void run() {
Runtime.getRuntime().addShutdownHook(new Thread(){public void run(){
try {
Server.serverSocket.close();
System.out.println("The server is shut down!");
} catch (Exception e) { /* failed */ }
}});

try {
Server.serverSocket = new DatagramSocket(Configuration.port);

byte[] receiveData = new byte[512];

DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
while(true) {
Server.serverSocket.receive(receivePacket);
byte[] data = receivePacket.getData();
System.out.println("RECEIVED: " + new String(data));
InetAddress IPAddress = receivePacket.getAddress();

/*
* data[0] : command/255 if
* data[1] : C-ID.
* data[2] : arguments/content
*/

TreatRequest(data, IPAddress);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

一切看起来都不错,但是当我使用某些软件(PacketSender)发送数据包时,它开始变得奇怪。这是我的控制台:

RECEIVED: [][][][][][]... // I sent 00 in hex, no problem there)
RECEIVED: ÿ[]ÿ[][][][]... // here's the response of the server)
RECEIVED: [][]ÿ[][][][]... // this ÿ is still there even if I just sent 00 in hex.

因此它只会覆盖数组,我被迫将其变大。

所以我想知道:

  • 如何使数据包日期每次都重置为很多 0?
  • 我可以只获取数据包大小的数组,而不是这种奇怪的“将数组作为参数传递”方法吗?

最佳答案

每次接收到数据包时,DatagramPacket 使用的缓冲区不会被清除。但是,getLength() 方法会告诉您当前数据包中接收了多少数据,您应该使用它来限制从缓冲区中提取的数据。举个例子:

System.out.println("RECEIVED: " + new String(data,0,receivePacket.getLength()));

关于Java 数据包困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030455/

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