在我的Android應用程序中,我發送UDP數據包,並使用此代碼等待特定的一個。當它到達時,我不需要再聽。但是,它處於「接收模式」,當我調用socket.close()時,它會引發異常。不知怎的,我應該阻止它。如何在接收狀態下關閉DatagramSocket
如何在沒有異常情況下停止接收?
socket.send(packet);
Log.w(Tags.DEBUG, "Sent");
while (shouldRunning)
{
byte[] buf = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buf, buf.length);
Log.w(Tags.DEBUG, "Receive start");
//if (socket != null && !socket.isClosed())
{
socket.receive(packet2);
Log.w(Tags.DEBUG, "ADDR" + packet2.getAddress().toString());
String data = String.valueOf(packet2.getData());
Log.w(Tags.DEBUG, "Data: " + data);
if (data.equals(Tags.SPEC1))
shouldRunning= false;
}
//else
//shouldRunning= false;
}
我關閉套接字這樣:
@Override
protected void onCancelled()
{
if (socket != null)
{
//socket.disconnect();
shouldRunning=false;
socket.close();
socket = null;
}
}
我得到這個異常:
java.net.SocketException異常:插座在org.apache.harmony關閉
.luni.platform.OSNetworkSystem.recv(Native Method)at dalvik.system.BlockGuard $ WrappedNetworkSystem.recv(BlockGuard.java:321) 在 org.apache.harmony.luni.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:172) 在 org.apache.harmony.luni.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:181) 在java的。 net.DatagramSocket.receive(DatagramSocket.java:402)
在com.example.Data.DataAsyncTask.Networking(DataAsyncTask.java:745)
我會盡力,謝謝。有沒有不涉及任何異常的方法? :) – Nestor
沒有(檢查)異常?這是Java ;-) – PeterMmm
你是對的:) – Nestor