udp傳輸過程中的埠被佔用和socket關閉錯誤
阿新 • • 發佈:2019-01-11
最近在做的一個專案使用的是UDP傳輸,中間出現的問題我總結了一下。
1.報埠號被佔用錯誤
Android DatagramSocket error message: EADDRINUSE (Address already in use)
這種情況我發現是我的傳送資料的埠號和接收資料的埠號是同一個埠號的問題,所以在設定埠號時儘量不要設定同一個埠號。
2.埠號被佔用的時候,我嘗試新增這些程式碼,發現不起作用,因為在埠號已經繫結的情況下,再解除繫結是不起作用的。
後來,我在socket關閉後解除了繫結,if (mySocket == null) { mySocket = new DatagramSocket(myPort); } else if (mySocket != null) { mySocket = new DatagramSocket(null); mySocket.setReuseAddress(true); mySocket.bind(new InetSocketAddress(myPort)); }
mySocket.close();
mySocket.setReuseAddress(true);
會報 java.net.SocketException: Socket is closed錯誤。
3.使用單一模式建立socket的時候,不要關閉socket,否則會報java.net.SocketException: Socket is closed錯誤。
socket = MainApplication.getInstance().getMyDatagramSocket();
4.沒有使用單例模式的時候必須關閉socket。
mySocket = new DatagramSocket(Udp_port_send); DatagramPacket pack = new DatagramPacket(info, info.length, receiverHost, Udp_port_send); mySocket.send(pack); mySocket.close();