gpt4 book ai didi

java - 阻止从输入 TCP 套接字读取

转载 作者:可可西里 更新时间:2023-11-01 02:52:24 26 4
gpt4 key购买 nike

我目前正在为一个分布式系统类(class)项目工作,我们必须在 Java 中实现一个小型传感器网络。传感器每 x 秒将温度发送到管理节点(也是传感器),记录它们。根据请求,用户节点连接到管理节点并接收检测到的温度的平均值。问题之一是管理节点可能“失败”。在失败之前,它实际上会向用户节点发送一条消息,该消息需要向将成为新管理员的其他常规节点之一发送一个特殊的数据包。用户节点通过 TCP 连接与管理员通信,它发送“请求”数据包并接收包含温度的数据包。我目前正在使用 java.net.socket 来实现它。

当管理员失败时,问题就来了。在正常情况下,可以创建一个新线程等待来自服务器的“失败”消息,然后使用新选择的管理节点创建一个新套接字。但是,如果管理员在响应用户请求发送消息之前失败,用户节点将无限期地等待,因为它正在从输入流中读取。

特别是,我使用以下行来创建套接字和输入流:

   this.socket = new Socket(this.serverAddress,this.serverPort);
this.in = new DataInputStream(socket.getInputStream());

以及 while 循环中的以下行以读取响应温度。

   String data = in.readUTF();

您建议如何处理这种情况?

此外,我正在考虑使用相同的 TCP 连接来接收来自管理节点的“失败”消息。我如何支持这一点?

最佳答案

只需通过 Socket.SetSoTimeout() 设置读取超时。

关于java - 阻止从输入 TCP 套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com