遇到紧急问题,无法找到解决方法。为了概述我的问题以及我正在研究的项目...它是关于读取我的android-phone的加速度计值并将这些值发送到我的基于ubuntu的Netbook。在linux方面,我收到这些值,我打算与他们合作以进一步的目的。但我甚至无法访问它们。但首先让我们从客户开始:
使用Android编写的客户端软件无法以明文形式显示DatagramPacket packet
和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: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;
我很感谢每一个建议。
答案 0 :(得分:0)
此代码中存在几个问题。这条线似乎很可疑:
byte[] g = {vts.getGxByte(),vts.getGyByte(),vts.getGzByte()};
如何获取浮点G值并将它们推入单个字节?
其次,这里的问题是你不能像你想要的那样将字节值转换为字符串。
在此代码中:
if (D) Log.d("UDP", "Client: Sending String-Values: '" + new String(g));
它实际上取字节并将它们解释为字符。您需要将它们转换回浮点数然后打印它们,但由于上面的问题编号1,您将无法真正为您工作 - 您将它们转换为单个字节。