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) {
}
}