Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复getsockname失败:EBADF(错误的文件号)?_Java_Android_Network Programming - Fatal编程技术网

Java 如何修复getsockname失败:EBADF(错误的文件号)?

Java 如何修复getsockname失败:EBADF(错误的文件号)?,java,android,network-programming,Java,Android,Network Programming,我的应用程序执行网络操作,如套接字创建、发送和接收TCP数据包。有时,我会得到下面这个我无法修复的异常。我已经尝试了所有可能的修复,但由于这是一个致命的例外,我的应用程序将崩溃并关闭,这是非常恼人的 我们可以做些什么来避免这个问题,或者至少可以避免崩溃 任何帮助都将不胜感激 01-24 10:29:27.675: E/AndroidRuntime(3781): java.lang.AssertionError: libcore.io.ErrnoException: getsockname fai

我的应用程序执行
网络操作
,如
套接字
创建、发送和接收
TCP
数据包。有时,我会得到下面这个我无法修复的异常。我已经尝试了所有可能的修复,但由于这是一个致命的例外,我的应用程序将崩溃并关闭,这是非常恼人的

我们可以做些什么来避免这个问题,或者至少可以避免崩溃

任何帮助都将不胜感激

01-24 10:29:27.675: E/AndroidRuntime(3781): java.lang.AssertionError: libcore.io.ErrnoException: getsockname failed: EBADF (Bad file number)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at libcore.io.IoBridge.getSocketLocalAddress(IoBridge.java:583)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at java.net.Socket.cacheLocalAddress(Socket.java:950)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at java.net.Socket.startupSocket(Socket.java:568)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at java.net.Socket.tryAllAddresses(Socket.java:127)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at java.net.Socket.<init>(Socket.java:177)
01-24 10:29:27.675: E/AndroidRuntime(3781):     at java.net.Socket.<init>(Socket.java:149)

这里xxxx和yyyy将是我的个人域名。

请发布您的代码。在您测试的点上,“socket”不可能为空。不要写无意义的代码。这似乎只是您发现自己的IP地址的一种方式,在这种情况下,它的成本过高。InetAddress中提供了用于此目的的方法。
InetAddress local_inet_addr = null;
    try {
        Socket socket = new Socket("www.xxxxxxx.com", 80);
        if (socket != null) {
            local_inet_addr = socket.getLocalAddress();
            socket.close();
            socket = null;
        }
    } catch (Exception e) {
        try {
            Socket socket = new Socket("www.yyyyyyyy.net", 80);
            if (socket != null) {
                local_inet_addr = socket.getLocalAddress();
                socket.close();
                socket = null;
            }
        } catch (Exception ex) {
        }
    }