1

我使用这里解释的 OCSF 框架,假设我使用 sendToServer(Object msg) 发送 originalMssg,它使用 java 的对象流和客户端上的套接字,然后在服务器端我运行 sendToClient(Object msg),其中 mssg 对象是和我从那个客户那里收到的一样。

现在,考虑以下回调,一旦从客户端代码上的服务器接收到 mssg,就会调用该回调:

@Override
protected void handleMessageFromServer(Object msg) {
  System.out.println(msg.equals(originalMssg));
    
}
  1. 在上述情况下,它总是会打印出来吗?
  2. 如果不是,在什么情况下不会?是否有可能让它总是返回真实?
  3. 如果在所有情况下它都返回 false,你如何标记你的 mssg 对象,以便在它从服务器返回时识别它?
4

2 回答 2

1

(这纯粹是基于阅读 OSCF 网站和 javadocs ... YMMV)

该网站称 OSCF 发送和接收可序列化的普通 Java 对象 (POJO)。由此我推断该msg对象可以是任何可序列化类的实例。

在上述情况下,它总是会打印 true 吗?

这是不可能的。这取决于实际类的实现方式equals

如果不是,在什么情况下不会?

不能说(见上文)。

是否有可能让它总是返回真实?

Ermm ...您需要更改equals您正在发送/接收的类的方法的实现。

如果在所有情况下它都返回 false ...

不可能说这个前提条件是否成立(见上文)。


底线。这msg是您自己实现或选择的某个类的实例。您可以使用适合您要求的行为来实现/选择它equals......包括(显然)与从客户端到服务器往返并再次返回的对象实例进行比较。

于 2013-04-21T12:10:34.333 回答
1

的主要OSCF属性是发送字符串或字符串数​​组.....所以首先检查您的对象是否为serializable.

然后是您制作的每个课程equals所需的方法。@Override

1)没有。

2)几乎任何时候它都是假的,你可以尝试向一个对象发送一个字符串,你应该得到真。

3)请参阅我对我的回答的介绍。

于 2013-04-21T12:17:29.690 回答