当前位置: 首页 > 知识库问答 >
问题:

Java服务器套接字数据输入流读取超时

陆宇航
2023-03-14

我有java服务器和只有一个客户端的时间。

  • 客户端连接并发送卡ID(在服务器端阻止读取是合适的,因为当时只有一个客户端)

共有3个答案

岳飞航
2023-03-14

正确的(但不是最简单的)方法是使用java.nio.channels.SocketChannel。它是读取ByteBuffer的方法。您可以将它与java.nio.channels.选择器结合在一起,从多个套接字中读取而不会阻塞(选择器可以帮助您找出哪个套接字有可用的数据),但是在您的情况下,您可以简单地使用SocketChannel

但使用起来要困难得多——没有InputStream,您需要管理ByteBuffer

另一种方法是启动一个看门狗线程,在超时期间Hibernate,然后在客户端尚未发送PIN时关闭套接字。关闭插座将中断被阻止的读卡器。

如果你想走那条路,一些老问题可以帮助你使用SocketChannel:

  • Socket vs SocketChannel
  • JavaServerSocketChannel SocketChannel(回调)
叶明辉
2023-03-14

服务器应该始终使用读取超时。您可以在第一次请求和响应后更改它。

满元凯
2023-03-14

我的建议是创建一个ExecutorService并用它启动一个线程。

这里有一个例子:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html

 类似资料:
  • 我使用一个具有双向通信的套接字设置了一个客户端-服务器模型。 应该是这样的:1。客户端-发送单词数组2。服务器-读取单词数组3。服务器-发送布尔值4。客户端-读取布尔值5。客户端-发送图像6。服务器读取图像 这个过程在一个循环中,与第一次迭代完美配合,但在第二次迭代中,我得到了以下错误: JAVA网SocketException:软件导致的连接中止:套接字写入错误 我认为发生的是,当服务器返回到读

  • 问题内容: 我有一个侦听某些x端口的套接字。 我可以从客户端应用程序将数据发送到套接字,但是无法从服务器套接字获得任何响应。 ..此代码部分从服务器读取数据。 但是,直到关闭服务器上的套接字,我才能从服务器读取任何内容。服务器代码不受我控制,无法对其进行编辑。 如何从客户端代码中克服这个问题。 谢谢 问题答案: 为了在客户端和服务器之间进行通信,必须明确定义协议。 客户端代码将阻塞,直到从服务器收

  • 问题内容: 我试图呼吁一个非常繁重的过程。平均工作时间估计为9-10分钟。 当我执行该过程时,我为一个巨大的数字设置了超时时间:99999999。 2分钟后,出现以下错误: java.net.SocketTimeoutException:读取超时 我尝试对其进行更多处理,并将超时设置为3000,并且在预期的3秒钟后出现了相同的错误。 您对为什么将其设置为最大120000 有任何想法吗? 问题答案:

  • 这是来自.properties得my DB配置: 这是config.xml: 实际上,我可以很容易地访问我们的本地web应用程序,并且可以在日志中看到到DB的连接跟踪,但对于批处理来说,情况并非如此。 在我有了这个之后: 有人帮忙吗?

  • 我目前正试图从服务器读取图像文件,但得到的数据不完整或 这与缓冲区大小有关吗?我已经尝试使用静态大小而不是ContentLength。敬请指教。

  • 我有两个通过字符串与套接字通信的Java项目。一个是客户端,另一个是服务器。服务器通过“ServerSocket”接受连接,并使用新创建的“套接字”创建新的“会话”(线程)。 同时,客户端只有一个“套接字”,一旦连接了这个套接字,客户端就会创建一个“ClientSession”(线程,非常类似于“session”)。 我想要的是服务器通过“username”字符串询问客户机他的用户名,客户机用他的