安卓-异步任务套接字写入超时

3

我有一个后台闹钟,每分钟运行一次,使用这里发布的示例:

Alarm Manager Example

我的实际闹钟启动一个AsyncTask(因为我正在进行网络交易),它看起来像这样:

Socket sock = new Socket("hostname.com", 1234);
        OutputStream out = sock.getOutputStream();
        String data = "beth";
        out.write(data.getBytes());
        sock.close();

如果网络连接不稳定,最简单的方法是让它超时。我已经检查了手机是否连接到WiFi。

setSoTimeout看起来很像我想要使用的方法,但它似乎只适用于正在接收内容的套接字。如果连接失败,则希望在几秒钟后放弃连接。

回复第一条评论:

以前我运行的代码是:

new Checkin().execute();

我现在应该运行什么命令:

new Checkin().get(10000, TimeUnit.MILLISECONDS);

想在10秒后超时吗?这会在10秒后停止异步任务吗?


1
这个问题可能会对你有所帮助:https://dev59.com/D2sz5IYBdhLWcg3weHkA - kmb64
谢谢!请看上面我添加的代码 - 这是实现我想要的方式吗? - xur17
我尝试了我上面发布的代码,但它根本没有执行asynctask - 我是否有什么误解? - xur17
我目前在上面显示的第二行收到了一个java.util.concurrent.TimeoutException,但它不应该超时 - 它应该很容易在10秒内完成。它只传输了一些字节。 - xur17
1个回答

0
使用 connect() 方法。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 10000);

注意:这将允许您设置连接超时时间,但不会为out.write()提供超时时间。我不知道OP正在寻找哪一个,但有时您需要后者(或两者都需要)。 - LarsH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接