Android UDP 返回随机字符

Android UDP returning random characters

我试图制作一个通过 UDP 接收 F1 2020 遥测数据的应用程序。

出于某种原因,无论我如何尝试将接收到的字节转换为字符串,它都只是 returns 个随机字符。

我确定这是某个地方的菜鸟错误,但我就是想不通在哪里

这是接收和记录数据包的class:

class ClientListen implements Runnable {
    private Thread t;

    public void run() {
        boolean run = true;
        try {
            DatagramSocket udpSocket = new DatagramSocket(20777);
            byte[] buffer = new byte[2048];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            while (run) {
                udpSocket.receive(packet);
                String received = new String(packet.getData(), 0, packet.getLength());
                packet.setLength(buffer.length);
                Log.i("Received data", received);
                try{
                    Thread.sleep(50);

                } catch (InterruptedException e) {}
            }
            udpSocket.close();

        }catch (IOException e) {
            Log.e("UDP client has IOException", "error: ", e);
            run = false;
        }
    }

    public void start() {
        if (t == null) {
            t = new Thread();
            t.start();
        }
    }
}

线程在我单击应用程序上的按钮时开始,我可以看到它记录数据并在游戏暂停时停止,这是应该的

数据输出类似于I/Received data: �����R<�<li�)C�������GndBƨS@3Z��N��9��y�}�Ժ�~��g�r��~�ө;��J�qӼ��?�RQ=�k�<h���p�<@84�C�������...

我以为是因为我记录的是字节而不是字符串,但我尝试了很多不同的方法来转换成字符串,结果总是这样。

For some reason, no matter how I try to turn the received bytes into a string, it just returns random characters.

当您执行 new String(bytes, ...) 时,您正在尝试将编码为字节的文本解码为 Unicode 字符...使用平台的默认字符集:

  • 如果字节表示的数据是以不同字符集编码的文本,则字符将无法正确解码。您需要使用正确的字符集。

  • 但是如果字节中的数据是二进制而不是文本,那么通过这种方式解码,你不太可能将它变成“随机字符”以外的任何东西,无论您使用什么字符集.

如果在 UDP 数据包中发送的数据是二进制的,这很常见。看来这里就是这种情况。


I'm sure its a noob mistake somewhere but I just can't figure out where

我认为你的错误是假设所有数据基本上都是文本。

当UDP数据包的格式有规范时,你应该从阅读开始。格式将决定您应如何解码数据包。

Google 搜索为我找到了这个:

如果没有规范,您将不得不逆向工程来自示例数据包的格式。这既乏味又 time-consuming,我们无法教你这样做。