套接字超时和取消

Ale*_*x F 3 java sockets android

我在AsyncTask中运行以下代码:

    socket = new Socket(host, Integer.parseInt(port));

在主机名正确但端口上没有套接字服务器侦听的情况下,此行可能会在抛出异常之前工作几分钟.我可以设置通讯超时吗?此外,是否可以停止此过程 - 目前它不响应AsyncTask.cancel调用.

Mat*_*lfe 5

使用no参数构造器创建套接字,如下所示:

socket = new Socket();
Run Code Online (Sandbox Code Playgroud)

然后用

socket.connect(remoteAddress, timeout);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅http://developer.android.com/reference/java/net/Socket.html.

- 更新 -

我最初没有注意到你问过如何取消套接字连接.虽然我不熟悉套接字编程,但看起来你会这样做:

  1. 你似乎已经尝试过,在asynctask上调用取消.
  2. 覆盖/实现异步任务的onCancelled方法.在实现中,您将需要使用对套接字的引用(使其成为类实例变量),并调用套接字的close()方法.请务必阅读关闭套接字并确保正确处理输入/输出流的异常,以确保您的应用程序不会崩溃.有关关闭套接字的更多信息,请查看问题.