Java:如何使用“资源尝试”设置套接字超时
Posted
技术标签:
【中文标题】Java:如何使用“资源尝试”设置套接字超时【英文标题】:Java: How to set a socket timeout with a "try with resources" 【发布时间】:2017-06-07 14:19:55 【问题描述】:我想设置一个套接字连接超时。我知道我可以使用 connect 方法设置它,但这是我的代码:
try(Socket socket = new Socket(InetAddress.getByName(ip), port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")), true))
【问题讨论】:
有什么问题?它没有提供所需的输出吗?是不是报错了? 问题是在连接套接字之前我不能使用getInputStream/getOutputStream 【参考方案1】:您的问题并不清楚您卡在哪里,但您可以继续使用connect
方法:
int timeout = 25000;
try (Socket socket = new Socket())
socket.connect(new InetSocketAddress("abc", 123), timeout);
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")), true))
【讨论】:
如果仍然需要建立连接,如何使用 getInputStream/getOutputStream? 好点。然后你可以嵌套两个 try-with-resources 语句。 感谢它显然有效。我应该多考虑一下!【参考方案2】:try(Socket socket = new Socket(InetAddress.getByName(ip), port))
socket.connect(adress, timeout);
catch (Throwable t)
handleException(t);
【讨论】:
你设置的超时时间是连接后不能设置的连接超时时间。以上是关于Java:如何使用“资源尝试”设置套接字超时的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 1.4 中设置 BufferedReader 和 PrintWriter 的超时时间?
如何为默认的swagger android客户端设置连接和套接字超时