【问题标题】:Detect data type of incoming request检测传入请求的数据类型
【发布时间】:2017-12-11 16:28:19
【问题描述】:

我正在使用 objectoutputstream 为已知设备发送和接收数据,但在我的情况下,其他带有“String”-Streams 的请求也可能在套接字的 InputStream 上。

检测传入流是否可以由 ObjectInputStream 处理或需要在普通缓冲读取器/输入读取器上显示为红色的最佳方法是什么。

感谢您的意见!

【问题讨论】:

  • 不会猜到传入的消息。你应该有一个非常好的协议,并且停止以这种方式猜测传入的可能类型。
  • 它实际上是一个定义良好的协议。有可能在同一个 ip/port 上,服务器需要处理两种不同类型的请求,可以是字符串流或对象流
  • 好吧,所以定义不明确。使其明确定义的一种解决方案是在发送实际数据之前发送一个标志(例如,一个字节,0 表示它是对象,1 表示它是 0),然后按原样读取下一个数据。我还建议您摆脱过多的 java 东西,并使用更常见的东西,例如 JSON/XML over java object marshalling,当 java 不可用时,拥有多个具有不同平台的客户端将对您有很大帮助。

标签: java sockets tcp-ip objectinputstream objectoutputstream


【解决方案1】:

您可以通过 objectoutputsteam 将字符串作为对象发送,另一方面,您可以使用 instanceof 检查它是否是字符串。如果不是,您可以继续使用 instanceof 来检查发送的对象是什么类。找到正确的类后,您必须将对象强制转换为该类。

【讨论】:

    【解决方案2】:

    经过漫长的反复,我们决定更改协议。正如@user8245293 所提到的,实际上有点乱。它带来了一个安全问题,并且会通过检测流类型来实现一个古怪的解决方案。

    对我们来说,最好的解决方案似乎是 - 如果其他人有兴趣 - 引入带有一些标头信息的轻度握手协议来安排流类型。

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2022-06-26
      • 1970-01-01
      • 2021-06-21
      • 2010-09-26
      相关资源
      最近更新 更多