我正在寫一個Android應用程序,其通過MulticastSocket時通信。它基本上正常工作,但我遇到了一個奇怪的錯誤:無論何時連接中斷和恢復(例如設備短暫失去WiFi連接),該應用程序仍然可以發送但不接收任何內容。當發送其他設備接收數據包時,但是當其他設備發送數據包時,設備不會收到它們。MulticastSocket時可以發送但不能接收
我已經驗證接收線程仍然在正常運行。它卡在socket.receive中。增加套接字超時並沒有幫助,它只是使接收超時而不接收任何東西。
當我關閉並重新打開了和MulticastSocket再次一切工作正常。我註冊了BroadcastReceiver進行連接更改,當連接丟失和恢復時會進行重新連接。這有點緩解了這個問題,但當連接在另一個點被中斷時(例如,重新啓動服務器),它仍然會發生。
所以我要麼需要修復的socket.receive或可靠地發現當插座無法接收任何數據包以關閉並重新打開它。有什麼建議麼?
代碼:
private MulticastSocket socket;
public void open() throws IOException {
socket = new MulticastSocket(serverAddress.getPort());
socket.joinGroup(serverAddress.getAddress());
receiver = new Receiver();
receiver.start();
}
private void send(MyPacket packet) throws IOException {
if (socket == null)
throw new IOException("Connection closed");
DatagramPacket datagramPacket =
new DatagramPacket(packet.getBuffer(), packet.getSize(), serverAddress);
socket.send(datagramPacket);
}
private class Receiver extends Thread {
@Override
public void run() {
while (!closing) {
if (socket == null)
return;
try {
socket.receive(packet);
} catch (IOException e) {
close("IOException in receiver thread", e);
return;
}
onPacketReceived(packet);
}
}
}