我只是从一本java书中学习网络,所以我有点像菜鸟.我无法在书中或网上找到这个问题所以我决定问互联网.
该书说使用ObjectOutputStream和ObjectInputStream来发送和接收不同控制台的对象.
现在,我能够成功接收我发送的对象 - 但只能接收一次.当我发送不同的对象:随机字符串和整数和无名实例时,控制台具有所有正确的字段.但是当我发送一个对象的实例时,更改其中一个实例的字段的值,然后重新发送该对象,然后inpustream会加载原始实例的值.
所以,例如,我有一个类的实例,其公共int"var"等于1.如果我发送此类的实例,客户端会收到它并正确报告var = 1.但是,如果我更改var到2(在同一个实例中)并重新发送它,客户端将完成调用read()方法(因此它必须已经接收到新对象!),但它会将var报告为1.如果我将实例发送到一个尚未收到实例的不同客户端,它会正确地将var报告为2,即使我更改了var,它也会继续将其报告为2.
如果客户端之前没有收到该实例的正确版本,则该事实必须意味着该对象正在通过输出流正确发送; 由于某种原因,输入流不起作用.它几乎就像它看到它是同一个对象所以它假定它具有相同的值而不进行检查.为什么会发生这种情况,我该如何解决?
对不起,如果我问一些愚蠢的东西 - 这本书没有解释序列化和套接字如何工作,只是如何使用它们,所以我很可能从根本上对如何使用它们感到困惑.谢谢!
我编写的用于测试问题的简单代码:
服务器:(有一个计时器动作来继续发送更新的对象)
public void actionPerformed(ActionEvent e)
{
object.var++;
output.write(object);
output.flush();
System.out.println(object.var);
}
Run Code Online (Sandbox Code Playgroud)
客户
public void run()
{
while(true)
{
Test t = (Test)input.readObject();
System.out.println(t.var);
}
}
Run Code Online (Sandbox Code Playgroud)
当这些程序运行时,Server类的输出是1,2,3,4 ......无限增加,而Client的输出只有1,1,1,1,1,1,1等.
感谢您抽出时间来阅读.对不起,如果我只是愚蠢,我是这个东西的新手.
编辑:对不起,read()是一个错误的类型(我手动输入代码因为我无法正确格式化),我的意思是input.readObject()