gpt4 book ai didi

java - 数据报包的大小

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

所以我只是红色了这段代码:

public static void main (String[] args) throws IOException{ 
DatagramSocket serverSocket = new DatagramSocket(1500);
while(true){
byte[] recieveData = null; //<---look at this #############!!!
DatagramPaket recievePaket = new DatagramPacket (recieveData, recieveData.length);
serverSocket.receive(recievePaket);
String text = recieveData.toString();
if (text.equals("exit")){
serverSocket.close();
System.exit(42);
}else if (text.equals("scan")){
scan();
}
}
}

现在我知道 DatagramPacket 需要一个缓冲区,但是如何用“null”初始化它?如果一个人不想存储收到的数据,这对我来说是有意义的,但如何才能看到是否发送了“退出”或“扫描”?最重要的是,在没有收到数据包之前,谁能知道缓冲区需要的大小呢?

最佳答案

以下作品:

public static void main (String[] args) throws IOException {
try (DatagramSocket socket = new DatagramSocket(PORT_NUMBER)) {
boolean loop = true;
final byte[] buffer = new byte[BUFFER_SIZE];
final DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (loop) {
socket.receive(packet);
final String text = new String(packet.getData()).trim();
switch (text) {
case "exit":
loop = false;
break;
case "scan":
scan();
break;
default:
System.err.printf("Received unknown command `%s`%n", text);
}
}
}
}

不幸的是,您必须设置缓冲区大小。

我所做的更改包括:

  • 添加缓冲区大小
    • 需要,因为您必须创建一个缓冲区来将数据放入
  • 添加trim()以删除换行符,以便netcat可以发送命令。
    • 需要,因为 exit\n 不等于 exit
  • 使用 switch 来清理命令路由
    • 使代码更易于阅读
  • 使用条件并尝试使用资源而不是无限循环
    • 避免出现问题,并确保套接字在退出时始终关闭
  • 添加词尾以使代码更易于推理
    • 明确哪些变量永远不会改变值
  • 将一些变量重命名为能够解释其用途的名称
    • 只需清理即可让 IntelliJ 显示真正的问题
  • 修复导致编译停止的小拼写错误
    • 在 Ubuntu 上使用 nc 进行测试,因此需要编译

关于java - 数据报包的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264865/

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