在前台使用好好的,进入后台以后一段时间是正常的但之后会报
java.net.SocketException: sendto failed: EPERM(Opereation not permitted)
源代码如下
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (ifUdp) {
byte[] sendBuf;
Log.d("SendMyLocationService","SendMyLocationService");
if (UdpData != null) {
sendBuf = UdpData.getBytes();
try {
daSocket = new DatagramSocket();
packet = new DatagramPacket(sendBuf, sendBuf.length, InetAddress.getByName(DataIP),
DataPort);
daSocket.send(packet);
Log.i("sendlola...", packet.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(30*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
这里的Thread.sleep本来是5s一发,会有这个异常,改成30s后目前还没有见到这个异常。很想知道这是个什么原因。我看stackoverflow上说The problem has been solved and the error was being caused from the payload of the SIP packet. The CSeq value in the SIP packet was being set to 0 initially. Instead it had to start from 1.大概是SIP负载的原因,初始化SIP包的时候要把CSeq改成1。不是很了解这块的协议,也不知道他说的对不对。请大家指教下。