【问题标题】:Java: How to set a socket timeout with a "try with resources"Java:如何使用“资源尝试”设置套接字超时
【发布时间】: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

标签: java sockets try-with-resources


【解决方案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);
}

【讨论】:

  • 你设置的超时时间是连接后不能设置的连接超时时间。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2012-04-20
  • 2023-03-21
  • 2012-11-12
相关资源
最近更新 更多