綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] Android socket datainputstream 的資料接收不正常

[複製連結] 查看: 1334|回覆: 0|好評: 0
跳轉到指定樓層
樓主
kansas73 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2015-4-30 10:17

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
我一直在研究socket的實作
我現在有一個client端
可以建立socket,程式碼如下:
  1. try {
  2.                                 socket = new Socket("192.168.0.110", 8080);//建立socket,手機對手機,測試程式                       
  3.                                 dataOutputStream = new DataOutputStream(socket.getOutputStream());//and stream                                                               
  4.                                 dataInputStream = new DataInputStream(socket.getInputStream());       
  5.                         }catch (IOException e) {               
  6.                         }
複製代碼

然後我按下按鈕可以傳送我要的byte給伺服器端,而伺服器端會回傳一個回應的byte給我
像是:

  1. byte[] byte = new byte[18];
  2. String s1;
  3. String AckOK="80";
  4. try {
  5.                                         byte[] buf=new byte[1];
  6.                                         buf[0]=(byte) 0X80;  
  7.                                         dataOutputStream.write(buf);
  8.                                         dataOutputStream.flush();
  9.                                         dataInputStream.readFully(byte);
  10.                                         s1 = new String(byte);                       
  11.                                         if(s1.equals(AckOK))
  12.                                     {
  13.                                             txt_ans.setText("ON");
  14.                                     }else if(s1.equals(AckERROR)){
  15.                                             txt_ans.setText("Power ON ERROR");
  16.                                     }
  17.                          }catch(Exception obj){       
  18.                          }                   
複製代碼

我將byte轉成string在顯示出來,這是正常的
我在按下另外一個按鈕傳送另一段指令給伺服器端時,這時候應該會回傳同樣的回應的byte給我,
可是這時候卻得到不正常的byte,
例如s1應該顯示為  80 可是卻顯示成好多的空格然後在手機畫面上換行才顯示80
求證後發現  無法判斷成s1.equals(AckOK)
我看伺服端的部分有正確的動作,所以回應應該也是對的
但是我接收端接收下來的資料卻是錯了

我覺得是 第一次從datainputstream裏頭得到的資料放在byte裡面是正確的
第二次再從datainputstream裏頭得到的資料 放進byte之後出現錯誤了
可是我不知道怎麼修正
請問版上有人有研究這方面的嗎?
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則