標籤:android socket 手機 伺服器 通訊
這兩天做了一個手機和電腦通訊利用socket進行網路通訊的小程式,先:
在寫程式的過程中發現了很多問題。。。
一、電腦和手機的IP必須在同一個網段,也就是IP的前三段必須是一樣的。
剛開始電腦和手機都連著老師辦公室的 無線,可是卻連不上。。折騰了好久才發現雖然都是連在同一個路由器,網段卻不一樣。(老師說應該是一樣的,我也不知道怎麼回事。)後來修改了手機的IP地址,才能連上。關於如何修改手機IP,百度一下就OK了。
二、ReadLine()讀資料阻塞問題
終於串連上了,卻讀不出資料。經過debug發現readline後面的代碼都不再執行了。上網搜了一下readline,才發現原來是個坑。有關知識看這裡
小心readline。解決方案:在每次發送資料前加分行符號。
<span style="font-size:14px;">out.write((data + '\n').getBytes("GBK"));</span>
三、pc端的字元編碼格式是GBK,而手機端的格式是UTF-8.在收發訊息時會出現亂碼。
解決方案:在將資料寫入流的時候,指定資料的編碼格式。
<span style="font-size:14px;">writer.write(me.getBytes("utf-8"));</span>
四、這是今天才發現的一個問題。當我在新建立的線程中執行
<span style="font-size:14px;">textView.append("伺服器:" + b + '\n');</span>拋出java.lang.RuntimeException: Can‘t create handler inside thread that has not異常。
網上搜了一下,有關UI的操作必須在UI線程中去執行。如果其他線程獲得的資料要改變UI介面,必須用handler想UI線程發送訊息,告訴UI線程。
解決方案:在主線程用一個handler對象來處理訊息,在自己建立的線程中用handler對象向主線程發送訊息。
主線程:
新線程:
折騰了這麼一頓,終於可以正常運行了!
項目代碼:
項目代碼
android手機用戶端與pc機進行socket通訊