【Android / KEN】Android 設備通過 Socket 通信


最後修改時間:2020/5/3

簡述

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  • 這是爲了讓 getlocalip() 函數能跑起來

遇到的問題:

1、一開始點擊客戶端發送按鈕,發現服務端沒有數據返回

  • 首先懷疑是線程沒有跑起來
    • 在線程中添加日誌,日誌能夠打印出來,說明線程已經啓動了
    • 那麼可以排除線程沒有跑起來
  • 然後,在上面打印的打印的日誌中,發現系統打印了以下日誌
W System.err: java.net.SocketException: Permission denied
W System.err:    at java.net.Socket.createImpl(Socket.java:473)
W System.err:    at java.net.Socket.connect(Socket.java:603)
W System.err:    at com.xxx.temperaturedatareceive.MainActivity$MyThread.run(MainActivity.java:79)

2、完成上面的修改,點擊客戶端發送按鈕,服務端還是沒有數據返回

  • 這次打出來的 logcat 日誌是:
W System.err: java.net.ConnectException: Connection refused
W System.err:    at java.net.PlainSocketImpl.socketConnect(Native Method)
W System.err:    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:334)
W System.err:    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
W System.err:    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
W System.err:    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
W System.err:    at java.net.Socket.connect(Socket.java:605)
W System.err:    at com.xxx.temperaturedatareceive.MainActivity$MyThread.run(MainActivity.java:79)
  • 重點是:java.net.ConnectException: Connection refused
  • 連接被拒絕,第一時間能想到兩種可能:
    • IP 或者端口號沒寫對(或者端口號超出有效範圍 / 有效端口值是:0 ~ 65535)
    • 服務端沒有打開網絡權限(即第一個問題中的權限):
    • <uses-permission android:name="android.permission.INTERNET" />
  • 經檢查,IP 和端口好是沒問題的
  • 於是在服務端代碼的 AndroidManifest.xml 中也添加了網絡權限
  • 在此之後,經過測試,服務端和客戶端能成功通信了,客戶端能接收到服務端返回來的數據了

結語

  • 通信成功,後續還有其他功能需要完善,之後有機會再更新本篇文章
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章