【问题标题】:Setting a time-out limit to readLine()?为 readLine() 设置超时限制?
【发布时间】:2011-10-29 07:54:07
【问题描述】:

我有以下代码通过 Java 中的套接字从 POP 服务器读取响应。但问题是有时,当我使用 readLine() 函数从服务器读取数据时,如果服务器没有回复任何响应,我的应用程序就会挂在那里,等待服务器的响应。

socket.connect(new InetSocketAddress("pop.server.com", 110), 3000);
input = socket.getInputStream();
BufferedReader incoming = new BufferedReader(new InputStreamReader(input));
incoming.readLine();   //This line will cause my application to hang if the server does not respond with a reply

有没有办法设置超时或其他方式,当服务器在一定时间后没有回复时,应用程序应该停止等待响应并继续执行其他操作?

【问题讨论】:

  • 你为什么不用Javamail?

标签: java sockets pop3


【解决方案1】:

我建议你试试Socket.setSoTime(timeout)

【讨论】:

  • 这不会在阅读整行时超时。如果客户端一直在发送字节但从未结束该行怎么办??
  • @grom 这是一个风险。客户端总是可以向您发送无穷无尽的数据,这会导致内存不足错误。如果您需要自定义处理,您必须自己编写代码。
  • @grom 您可以在自己的 while 循环中使用 Read()。该方法只读取一个字符。如果你将它与超时结合起来,你应该能够做你想做的事。与“自己编写代码”不太一样:)
猜你喜欢
  • 2011-12-02
  • 2011-04-30
  • 2019-10-14
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2011-12-26
相关资源
最近更新 更多