[英]Android UDP returning random characters
我試圖制作一個通過 UDP 接收 F1 2020 遙測的應用程序。
出於某種原因,無論我如何嘗試將接收到的字節轉換為字符串,它都只會返回隨機字符。
我確定這是某個地方的菜鳥錯誤,但我就是不知道在哪里
這是接收和記錄數據包的 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();
}
}
}
當我單擊應用程序上的按鈕時線程開始,我可以看到它記錄數據並在游戲暫停時停止,因為它應該
數據 output 類似於I/Received data: �����R<�<li�)C�������GndBƨS@3Z��N��9��y�}�Ժ�~��g�r��~�ө;��J�qӼ��?�RQ=�k�<h���p�<@84�C�������...
我認為這是因為我記錄的是字節而不是字符串,但是我嘗試了許多不同的方法來轉換為字符串並且它總是有這個結果。
出於某種原因,無論我如何嘗試將接收到的字節轉換為字符串,它都只會返回隨機字符。
當您執行new String(bytes, ...)
您正在嘗試將編碼為字節的文本解碼為 Unicode 字符...使用您平台的默認字符集:
如果字節表示的數據是以不同字符集編碼的文本,則字符將無法正確解碼。 您需要使用正確的字符集。
但是,如果字節中的數據是二進制而不是文本,那么無論您使用什么字符集,都不太可能通過這種方式解碼將其轉換為“隨機字符”以外的任何內容。
如果在 UDP 數據包中發送的數據通常是二進制的。 看起來就是這種情況。
我確定這是某個地方的菜鳥錯誤,但我就是不知道在哪里
我認為您的錯誤是假設所有數據基本上都是文本。
當這些 UDP 數據包的格式有規范時,您應該從閱讀它開始。 格式將決定您應該如何解碼數據包。
谷歌搜索為我找到了這個:
如果沒有規范,您將不得不對示例數據包的格式進行逆向工程。 這既乏味又耗時,而且不是我們可以教你做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.