Android UDP套接字IOException:sendto失败:EPERM(不允许操作)

时间:2019-09-18 12:49:57

标签: java android sockets udp

我在Android中编写了一个与UDP套接字定期通信的应用程序。 我创建了一个datagramSocket,并每隔5秒定期从服务器发送和接收一个数据包,这是代码的一部分:

Thread commTh = new Thread(new Runnable() {

    @Override
    public void run() {
        try {
            ds = new DatagramSocket();
            serverAddr = InetAddress.getByName(ip);
            ds.connect(serverAddr, port);

            while(exitThread) {

                ....

                DatagramPacket dp;
                dp = new DatagramPacket(data.getBytes(),
                        data.length(), serverAddr, port);

                ds.setSoTimeout(DEFAULT_TIMEOUT);

                ds.send(dp);

                byte[] lMsg = new byte[SOCKET_BYTE];
                dp = new DatagramPacket(lMsg, lMsg.length);
                ds.receive(dp);

                ....

                Thread.sleep(5000);


            }
        }
        catch (Exception e) {
            e.printStackTrace();

        }
    }
});

几十分钟后,我得到了这个异常:

W/System.err: java.io.IOException: sendto failed: EPERM (Operation not permitted)
W/System.err:     at         libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:576)
    at libcore.io.IoBridge.sendto(IoBridge.java:544)
    at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:125)
    at java.net.DatagramSocket.send(DatagramSocket.java:721)

为什么我不允许进行手术?我的清单中有Internet权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

0 个答案:

没有答案