我正试图从客户端接收数据并将其记录到控制台中。
这是我如何做到的:
当涉及打印我的`messageToPrint`时,它实际上会重复上一个消息,并重新打印新的消息。
不过我已经找出了问题所在。
如果把数组`data`的分配放到`while`循环内部,一切都能正常工作,我不会再次收到之前的消息,只有当前的消息。
但我不想这么做,因为循环内的分配不是一个好主意,所以我需要在新数据到来之前清除我的数组。
不在循环内部分配的输出内容如下:
private final int MAX_PACKET_SIZE = 1024;
private byte[] data = new byte[MAX_PACKET_SIZE];
private void receive() {
new Thread(() -> {
while (running) {
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
sPort = packet.getPort();
ip = packet.getAddress();
address = ip.toString();
} catch (Exception e) {
e.printStackTrace();
}
String messageToPrint = new String(packet.getData());
System.out.println(messageToPrint.trim() + " " + address + " | " + sPort);
}
}).start();
}
当涉及打印我的`messageToPrint`时,它实际上会重复上一个消息,并重新打印新的消息。
不过我已经找出了问题所在。
如果把数组`data`的分配放到`while`循环内部,一切都能正常工作,我不会再次收到之前的消息,只有当前的消息。
但我不想这么做,因为循环内的分配不是一个好主意,所以我需要在新数据到来之前清除我的数组。
不在循环内部分配的输出内容如下:
Console: past message
Console: (imagine i typed hello) hellomessage
以此类推。
Arrays.fill()
?但我怀疑这不会比分配一个新数组更快。 - user330315