4

我在 AsyncTask 中运行了以下代码:

    套接字 = 新套接字(主机,Integer.parseInt(端口));

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

4

3 回答 3

5

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

socket = new Socket();

然后使用

socket.connect(remoteAddress, timeout);

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

- 更新 -

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

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

You have to create a socket first and then use below method in it.

Socket client=new Socket();   
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out); 
于 2012-10-05T06:24:39.080 回答
0

你可以这样做:

Socket soc = null;
while(soc == null){
    try{
        soc = new Socket("x.x.x.x", portNumber);
    }
    catch(Exception ex){
    }
}

自从:

socket.connect(remoteAddress, timeout)

众所周知,它不可靠,您可以编写自己的超时版本。我写的代码,无限等待连接,但你可以很容易地引入一个计时器。

于 2016-06-16T14:04:44.080 回答