android手機客戶端與pc機進行socket通信
來源:程序員人生 發布時間:2015-09-02 08:03:50 閱讀次數:4035次
這兩天做了1個手機和電腦通訊利用socket進行網絡通訊的小程序,上圖先:


在寫程序的進程中發現了很多問題。。。
1、電腦和手機的IP必須在同1個網段,也就是IP的前3段必須是1樣的。
剛開始電腦和手機都連著老師辦公室的 無線,可是卻連不上。。折騰了好久才發現雖然都是連在同1個路由器,網段卻不1樣。(老師說應當是1樣的,我也不知道怎樣回事。)后來修改了手機的IP地址,才能連上。關于如何修改手機IP,百度1下就OK了。
2、ReadLine()讀數據阻塞問題
終究連接上了,卻讀不出數據。經過debug發現readline后面的代碼都不再履行了。上網搜了1下readline,才發現原來是個坑。有關知識看這里
謹慎readline。解決方法:在每次發送數據前加換行符。
<span style="font-size:14px;">out.write((data + '
').getBytes("GBK"));</span>
3、pc真個字符編碼格式是GBK,而手機真個格式是UTF⑻.在收發消息時會出現亂碼。
解決方法:在將數據寫入流的時候,指定數據的編碼格式。
<span style="font-size:14px;">writer.write(me.getBytes("utf⑻"));</span>
4、這是今天才發現的1個問題。當我在新創建的線程中履行<span style="font-size:14px;">textView.append("
服務器:" + b + '
');</span>
拋出
java.lang.RuntimeException: Can't create handler inside thread that has not異常。
網上搜了1下,有關UI的操作必須在UI線程中去履行。如果其他線程取得的數據要改變UI界面,必須用handler想UI線程發送消息,告知UI線程。
解決方法:在主線程用1個handler對象來處理消息,在自己創建的線程中用handler對象向主線程發送消息。
主線程:
新線程:
折騰了這么1頓,終究可以正常運行了!
項目代碼:
項目代碼
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈