繁体   English   中英

java.net.BindException:绑定失败:尝试为UDP连接创建DatagramSocket时EACCES(权限被拒绝)

[英]java.net.BindException: bind failed: EACCES (Permission denied) when trying to create DatagramSocket for UDP connection

我正在尝试将UDP数据包发送到android studio中的远程主机。 但是这个错误出现了:

java.net.BindException: bind failed: EACCES (Permission denied)
    at libcore.io.IoBridge.bind(IoBridge.java:103)
    at java.net.PlainDatagramSocketImpl.bind0(PlainDatagramSocketImpl.java:104)
    at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:110)
    at java.net.DatagramSocket.bind(DatagramSocket.java:412)
    at java.net.DatagramSocket.<init>(DatagramSocket.java:262)
    at java.net.DatagramSocket.<init>(DatagramSocket.java:319)
    at com.genean.dronecontroller.PacketSender.sendConnectionPacket(PacketSender.java:55)
    at com.genean.dronecontroller.PacketSender.access$000(PacketSender.java:20)
    at com.genean.dronecontroller.PacketSender$1.run(PacketSender.java:45)
    at java.lang.Thread.run(Thread.java:784)
 Caused by: android.system.ErrnoException: bind failed: EACCES (Permission denied)
    at libcore.io.Linux.bind(Native Method)
    at libcore.io.ForwardingOs.bind(ForwardingOs.java:60)
    at libcore.io.IoBridge.bind(IoBridge.java:99)
    at java.net.PlainDatagramSocketImpl.bind0(PlainDatagramSocketImpl.java:104) 
    at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:110) 
    at java.net.DatagramSocket.bind(DatagramSocket.java:412) 
    at java.net.DatagramSocket.<init>(DatagramSocket.java:262) 
    at java.net.DatagramSocket.<init>(DatagramSocket.java:319) 
    at com.genean.dronecontroller.PacketSender.sendConnectionPacket(PacketSender.java:55) 
    at com.genean.dronecontroller.PacketSender.access$000(PacketSender.java:20) 
    at com.genean.dronecontroller.PacketSender$1.run(PacketSender.java:45) 
    at java.lang.Thread.run(Thread.java:784) 

这是PacketSender的第55行:

socket = new DatagramSocket(HOST_PORT);

我已经尝试添加android.permission.INTERNET,甚至用它来检查它

if (ContextCompat.checkSelfPermission(activity, Manifest.permission.INTERNET)
            != PackageManager.PERMISSION_GRANTED) {
        Toast toast = Toast.makeText(activity.getApplicationContext(),
                activity.getString(R.string.no_internet_perms), Toast.LENGTH_LONG);
        toast.show();
    }

但它仍然给我一个权限错误。

编辑:怀疑它可能是使用的端口是333。

显然,我意识到尽管有android.permission.INTERNET,但是不可能使用特定的本地端口来建立套接字。 您获得权限错误或该端口已被其他应用程序占用。 因此,我通过启动我的DatagramSocket而没有任何参数来修复它,以允许Android设置任意端口号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM