Java 数据包的大小
所以我只是把这段代码涂成红色:Java 数据包的大小,java,arrays,network-programming,Java,Arrays,Network Programming,所以我只是把这段代码涂成红色: public static void main (String[] args) throws IOException{ DatagramSocket serverSocket = new DatagramSocket(1500); while(true){ byte[] recieveData = null; //<---look at this #############!!! DatagramPaket
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();
}
}
}
publicstaticvoidmain(字符串[]args)抛出IOException{
DatagramSocket serverSocket=新DatagramSocket(1500);
while(true){
字节[]receivedata=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可以发送命令。
- 退出时需要\n
不等于退出
- 使代码更易于阅读
- 避免问题,并确保插座在退出时始终关闭
- 很明显哪些变量永远不会改变值
- 只需清理即可让IntelliJ显示真正的问题
- 在Ubuntu上用nc测试,所以需要编译
receivedata.length
是一个空字段,你确定代码有效吗?我尝试了,但没有成功,在预期的位置提供了一个空指针。不知道它是否有效,问题是基本上如何做。很好的答案!让我问几个关于你答案的问题:缓冲区大小可以设置为4字节吗,因为我们只希望重新设置接收命令“scan”和“exit”?(将自动放弃顶部的换行符)。并且,假设我们希望以无限循环的形式运行此命令,并根据需要随时接收“scan”,是否仍然可以将变量声明为final(不这样认为,对吗?)当然,trim确实有助于显示短的错误命令,如foo
,不过,循环可以运行多次,final只是确保变量在范围内时不会更改