【发布时间】:2015-08-12 22:48:53
【问题描述】:
我希望在 AsyncTask 中我的应用程序尝试连接到服务器,直到连接完成。如果我启动应用程序时服务器正在运行,它可以工作,但如果我启动应用程序然后启动服务器,它会显示:java.io.IOException: fcntl failed: EBADF (Bad file number)
public class FetchData extends AsyncTask {
BufferedReader in;
InetSocketAddress socketAddress;
@Override
protected Object doInBackground(Object[] params) {
socketAddress = new InetSocketAddress("192.168.1.158", 9999);
while(!_socket.isConnected()) {
try {
_socket.connect(socketAddress);
Log.d("socket_status", "Socket is connected!");
break;
} catch (IOException e) {
Log.d("socket_status", e.toString());
e.printStackTrace();
}
}
return null;
}
}
更新:_socket 是在 onCreate 方法 @Override 中创建的
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_widget);
if(_socket == null)
_socket = new Socket();
-----------------------
}
【问题讨论】:
-
您是否在清单中添加了 Internet 权限?
-
是的,我做到了。如果我只是与
_socket.connect(socketAddress)连接并且服务器正在运行,它工作正常。问题只是当我启动应用程序时,服务器没有运行,当我启动服务器时,什么也没有发生。它只是循环并抛出异常。 -
您甚至没有显示创建套接字的位置和时间。解决方案是每次在 catch 块中创建一个新套接字。
-
创建新套接字无效。