gpt4 book ai didi

java - 接收/发送数据报套接字数据

转载 作者:行者123 更新时间:2023-12-01 12:26:55 28 4
gpt4 key购买 nike

所以我正在用 Java 编写一个程序,在 DatagramSocket 和 DatagramPacket 的帮助下发送和接收数据。问题是,在我发送数据/接收数据之间的某个时间 - 我发送数据的程序中的数据也有所不同,但仅限于某些情况,如下所示:

Sending: 378 Receiving: 3786
Sending: 374 Receiving: 3742
Sending: 360 Receiving: 3604

但有时会起作用,例如:

Sending: 376 Receiving: 376
Sending: 372 Receiving: 372
Sending: 344 Receiving: 344

我发送两个坐标,首先将其转换为字符串:

String message = Integer.toString(coord1) + " " + Integer.toString(coord2);

然后将字符串转换为字节数组,以便能够使用 DatagramPacket 发送它:

byte[] b = message.getBytes(Charset.forName("UTF-8"));
DatagramPacket packet = new DatagramPacket(b, b.length, remoteHost, remotePort);

try {
datagramSocket.send(packet);
} catch(Exception e) {
e.printStackTrace();
}

这是我接收数据的线程:

private DatagramSocket dSocket;
private DatagramPacket packet;
private byte[] buffer;
private PaintProgram prog;

public ReceiverThread(int myPort, PaintProgram prog) {
this.prog = prog;

try {
buffer = new byte[256];
dSocket = new DatagramSocket(myPort);
packet = new DatagramPacket(buffer, buffer.length);
} catch(Exception e) {
e.printStackTrace();
}

this.start();
}

@Override
public void run(){
do{
try {
dSocket.receive(packet);
String data = new String(buffer, "UTF-8");
prog.handlePacket(data);
} catch(IOException e) {
e.printStackTrace();
}
}
while(!this.currentThread().isInterrupted());
}

这是我“处理”收到的数据包的方法:

String[] xy = data.split(" ");
Point point = new Point(Integer.parseInt(xy[0].trim()), Integer.parseInt(xy[1].trim()));

然后我将使用两个坐标创建的点添加到我的程序中。我不知道这个过程中哪里出了问题。如果有一些新的视角会很酷!谢谢。

最佳答案

String data = new String(buffer, "UTF-8");

这应该是

String data = new String(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8");

关于java - 接收/发送数据报套接字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26262367/

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