gpt4 book ai didi

java - 以明文形式查看 UDP 消息时出现问题

转载 作者:行者123 更新时间:2023-11-30 18:03:31 24 4
gpt4 key购买 nike

遇到紧急问题,但无法找到解决方案。为了让您概述我的问题和我正在从事的项目...它是关于读取我的 android 手机的加速度计值并将这些值发送到我基于 ubuntu 的上网本。在Linux方面,我收到这些值,并且我打算将它们用于进一步的目的。但我什至无法访问它们。但首先让我们从客户端开始:

  • 如下 Android 编写的客户端软件既不能以明文形式显示 DatagramPacket 数据包,也不能显示 byte[] g:

            try{
    DatagramSocket socket = new DatagramSocket();
    InetAddress addr = InetAddress.getByName("192.168.1.2"); // Dell Netbook
    if(D) Log.d("UDP", "Client: Connecting...");

    // Neues Byte erstellen
    byte[] g = {vts.getGxByte(),vts.getGyByte(),vts.getGzByte()};
    if(D) Log.d("byte-Länge:", " " + g.length);

    // UDP-Paket erstellen mit Daten, Zieladresse und -port
    DatagramPacket packet = new DatagramPacket(g, g.length, addr, 3333);
    if (D) Log.d("UDP", "Client: Sending x-Value: '" + Byte.toString(vts.getGxByte()));
    if (D) Log.d("UDP", "Client: Sending y-Value: '" + Byte.toString(vts.getGyByte()));
    if (D) Log.d("UDP", "Client: Sending z-Value: '" + Byte.toString(vts.getGzByte()));
    if (D) Log.d("UDP", "Client: Sending Byte-Values: '" + g);
    if (D) Log.d("UDP", "Client: Sending String-Values: '" + new String(g));
    if (D) Log.d("UDP", "Client: Sending Packet: '" + packet);

    socket.send(packet);
    if (D) Log.d("UDP", "Client: Sent.");
    if (D) Log.d("UDP", "Client: Done.");

    }

    我出于调试目的记录的数据不是我所期望的:

    12-02 14:46:30.115:调试/加速计 x 值:(21290):1.7570249

    12-02 14:46:30.125:调试/加速度计 y 值:(21290):-0.87170225

    12-02 14:46:30.125:调试/加速计 z 值:(21290):4.4936256

    12-02 14:46:30.165:DEBUG/PendingMsgSendReceiverRegister(769):输入sendQueuedMessage

    12-02 14:46:30.185: DEBUG/PendingMsgSendReceiverRegister(769): sendQueuedMessage,游标不为空且计数:0

    12-02 14:46:30.195: 调试/UDP(21290): 客户端: 正在连接...

    12-02 14:46:30.195: 调试/字节-Länge:(21290): 3

    12-02 14:46:30.195: 调试/UDP(21290): 客户端: 发送 x 值: '-1

    12-02 14:46:30.195: 调试/UDP(21290): 客户端: 发送 y 值: '0

    12-02 14:46:30.195: 调试/UDP(21290): 客户端: 发送 z 值: '-1

    12-02 14:46:30.195: 调试/UDP(21290): 客户端: 发送字节值: '[B@40576b80

    12-02 14:46:30.205: 调试/UDP(21290): 客户端: 发送字符串值: '????

    12-02 14:46:30.205: 调试/UDP(21290): 客户端: 发送数据包: 'java.net.DatagramPacket@40576c08

    12-02 14:46:30.205:调试/UDP(21290):客户端:已发送。

    12-02 14:46:30.205: 调试/UDP(21290): 客户端:完成

所以我想要的是明文形式的值,而不是指针或问号(请参阅“发送字节值/字符串值/数据包”行)

  • 在服务器端我也收到这些问号。我猜这是 ASCII 翻译。但正如前面提到的,我需要原始数据。这是 C 中的代码:

    while (1)
    {

    bytes_read = recvfrom(sock,recv_data,1024,0,
    (struct sockaddr *)&client_addr, &addr_len);

    recv_data[bytes_read] = '\0';

    printf("\n(%s , %d) said : ",inet_ntoa(client_addr.sin_addr),
    ntohs(client_addr.sin_port));
    printf("%s", recv_data);
    fflush(stdout);

    }
    return 0;

我感谢每一个建议。

最佳答案

这段代码有几个问题。这行似乎很可疑:

byte[] g = {vts.getGxByte(),vts.getGyByte(),vts.getGzByte()};

如何获取浮点 G 值并将它们插入单个字节?

其次,这里的问题是您无法像您尝试那样将 Byte 值转换为字符串。

在此代码中:

        if (D) Log.d("UDP", "Client: Sending String-Values: '" + new String(g));

它实际上是获取字节并将它们解释为字符。您需要将它们转换回 float ,然后打印它们,但这对您来说实际上不起作用,因为上面的问题 1 - 您将它们转换为单个字节。

关于java - 以明文形式查看 UDP 消息时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357792/

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