gpt4 book ai didi

Java:可以发送和接收UDP数据包,但接收到的数据是乱码

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

编辑:已解决(请参阅评论)

我正在尝试编写一个非常基本的程序/系统,其中一个程序发送包含带有单词 iwas 和一位数字的字符串的 UDP 数据包,例如“iwas2”。第二个程序应该接收数据包(然后将其内容写入 vector )。
发送程序似乎工作正常,但接收程序则不然。当我启动接收程序时,一旦发送程序启动/开始发送,它就会收到一个数据包(并且之前没有收到数据包/将其他东西误解为数据包),但是接收到的内容与发送的内容或对我来说完全有意义。例如。发送方发送“iwas1”,接收方理解“[B@6a2bcfcb”。 (根据wireshark,发送方数据包的数据部分实际上是“iwas1”,长度为5个字节,因此这似乎不是问题。)

//code of sender-programm
import java.io.IOException;
import java.net.*;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class umgebung {
public static void main(String[] args) throws IOException, InterruptedException {


//try {
//byte[] buffer = new byte[65508];
//InetAddress address = InetAddress.getByName("jenkov.com");

//DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9000);

//Integer inteins = new Integer(5);
Random zahlgen = new Random();
int aktwetter = 0; //initialisieurng
DatagramSocket socketeins = new DatagramSocket(90);


while (0 != 1) {
/*
int neugenentscheidungszahl = zahlgen.nextInt() % 10;
if (neugenentscheidungszahl > 8) {
aktwetter = zahlgen.nextInt() % 4;
}
*/
aktwetter = ++aktwetter % 4;
System.out.printf(aktwetter + "\n");



String stringeins = new String("iwas" + aktwetter);
;
byte[] buffer = stringeins.getBytes();
//InetAddress empfangsip;
//empfangsip = InetAddress.getByName("127.0.0.1");

DatagramPacket paketeins = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 50); //senden an port 50
//DatagramSocket socketeins = new DatagramSocket(90);
socketeins.send(paketeins);

TimeUnit.SECONDS.sleep(1);
}
//}
/*
catch(IOException | InterruptedException e){
//e.printStackTrace();
System.out.printf("verkackt");
}
*/
}
}

.

//code of receiver-programm  
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;

public class empfaenger {
public static void main(String[] args) throws IOException {
InetAddress empfangadresse = InetAddress.getByName("127.0.0.1");
DatagramSocket socketeins = new DatagramSocket(50, empfangadresse);


byte[] empfangbytearray = new byte[65000];
DatagramPacket empfangpaket = new DatagramPacket(empfangbytearray, empfangbytearray.length);
socketeins.receive(empfangpaket);


String teststring = new String(empfangpaket.getData().toString());
System.out.println("bla" + teststring + "bla");
}
}

我认为问题很可能是我如何处理/解释收到的字节,但不知道到底在哪里。感谢您的帮助。

最佳答案

行内String teststring = new String(empfangpaket.getData().toString());

更改为

String teststring = new String(empfangpaket.getData());

您正在打印 Byte[].toString() 的结果,而不是您期望的结果。

关于Java:可以发送和接收UDP数据包,但接收到的数据是乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960342/

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