以明文形式查看UDP消息的问题

时间:2011-12-02 14:25:37

标签: java android c udp

遇到紧急问题,无法找到解决方法。为了概述我的问题以及我正在研究的项目...它是关于读取我的android-phone的加速度计值并将这些值发送到我的基于ubuntu的Netbook。在linux方面,我收到这些值,我打算与他们合作以进一步的目的。但我甚至无法访问它们。但首先让我们从客户开始:

  • 使用Android编写的客户端软件无法以明文形式显示DatagramPacket packetbyte[] 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:DEBUG / Accelerometer x-Value:(21290):1.7570249

    12-02 14:46:30.125:DEBUG / Accelerometer y-Value:(21290): - 0.87170225

    12-02 14:46:30.125:DEBUG / Accelerometer z-Value:(21290):4.4936256

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

    12-02 14:46:30.185:DEBUG / PendingMsgSendReceiverRegister(769):sendQueuedMessage,cursor not null and count:0

    12-02 14:46:30.195:DEBUG / UDP(21290):客户:连接......

    12-02 14:46:30.195:DEBUG / byte-Länge:(21290):3

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

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

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

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

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

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

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

    12-02 14:46:30.205:DEBUG / 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;
    

我很感谢每一个建议。

1 个答案:

答案 0 :(得分:0)

此代码中存在几个问题。这条线似乎很可疑:

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

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

其次,这里的问题是你不能像你想要的那样将字节值转换为字符串。

在此代码中:

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

它实际上取字节并将它们解释为字符。您需要将它们转换回浮点数然后打印它们,但由于上面的问题编号1,您将无法真正为您工作 - 您将它们转换为单个字节。