小编Lan*_*nce的帖子

Android:java.net.DatagramSocket.bind:无效的参数异常

背景:我正在编写一个简单的UDP应用程序来ping我测试服务器,我每隔一分钟左右就会告诉我它仍然正常运行(我无法在服务器上为那些想知道的人启用ping).我计划在手机上运行此功能,以便在服务器不再响应时发出警告.

我正在尝试使用看似简单的java.net.DatagramSocket:

    try
    {
        socket = new DatagramSocket();
        socket.bind(null);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }
Run Code Online (Sandbox Code Playgroud)

我还说我已经通过android清单启用了Internet权限,如果我删除uses子句这样做,我会收到权限错误,所以我确信它工作正常.当我将此代码下载到Android虚拟设备(AVD)并执行它时,在调用bind()时,我遇到了以下异常:

03-17 19:07:39.401:INFO/System.out(338):java.net.BindException:参数无效

根据文档,null参数是正确的:

public void bind(SocketAddress localAddr)

自:API级别1

将此套接字绑定到localAddr指定的本地地址和端口.如果此值为null,则使用有效本地地址上的任何空闲端口.

但不信任文档,我决定在我的设备上枚举IP地址,如下所示:

    ArrayList<NetworkInterface>  allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

    NetworkInterface eth = allInterfaces.get(0);

    InetSocketAddress addr = new InetSocketAddress(eth.getInetAddresses().nextElement(), port);

    try
    {
        socket = new DatagramSocket();
        socket.bind(addr);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }
Run Code Online (Sandbox Code Playgroud)

当我单步执行代码时,它工作得很好,我可以看到AVD上的两个IP地址,但我在bind()调用上得到完全相同的异常.有没有人看到我可能会失踪的?我将继续研究并希望为我自己的问题发布一个解决方案,但我希望有人能够为我提供快捷方式.

java android arguments bind

7
推荐指数
1
解决办法
7825
查看次数

标签 统计

android ×1

arguments ×1

bind ×1

java ×1