Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用序列化对象的客户机/服务器通信_Java_Sockets_Serialization - Fatal编程技术网

Java 使用序列化对象的客户机/服务器通信

Java 使用序列化对象的客户机/服务器通信,java,sockets,serialization,Java,Sockets,Serialization,我尝试为一个智囊团游戏建立客户端/服务器连接。 我考虑使用枚举来表示不同的peg,并使它们可序列化 然后我必须实现连接,使用serversocket,使用accept获取套接字,等等。 一旦建立了连接,我首先必须读取客户端对象,这就是我遇到问题的地方 这是我的一段代码,它在我做任何事情之前就产生了EOFEException! (客户端数据在用户交互时发送) ObjectInputStream ois= 新的ObjectInputStream(socket.getInputStream()); A

我尝试为一个智囊团游戏建立客户端/服务器连接。 我考虑使用枚举来表示不同的peg,并使它们可序列化

然后我必须实现连接,使用serversocket,使用accept获取套接字,等等。 一旦建立了连接,我首先必须读取客户端对象,这就是我遇到问题的地方

这是我的一段代码,它在我做任何事情之前就产生了EOFEException! (客户端数据在用户交互时发送)

ObjectInputStream ois=
新的ObjectInputStream(socket.getInputStream());
ArrayList组合=新的ArrayList();
做
{
组合。清除();
对于(int i=0;i<4;i++)
{
add((Peg)ois.readObject());
}
}
而(!检查组合(组合));
ois.close();
socket.close();

提前谢谢

我们需要更多细节。如何同步客户端的写入和服务器上的读取?你能发布更多细节吗


顺便问一下,使用原始插座是绝对的要求吗?如果没有,请尝试用更少的麻烦完成您想要做的事情(即透明地、更频繁地跨Java对象发送)。

如果您收到EOFEException,则表示另一端已关闭连接

如果要发送列表,只需发送列表即可。i、 e

// on the sender
List<Peg> list =
oos.writeObject(list);

// on the receiver
List<Peg> list = (List<Peg>) oid.readObject();
//在发送方上
列表=
oos.writeObject(列表);
//在听筒上
List=(List)oid.readObject();

鉴于您只显示了一半的代码,我将继续指责客户机。客户机不必直接提供其对象,因为它需要用户交互。我打开插座等待,直到有东西要读。这不是常见的行为吗?关键是,如果没有看到负责的代码,就不可能诊断网络(或序列化)错误。您所展示的只是一些高级界面,同时抽象出重要的细节。您甚至没有显示
socket
的创建。我熟悉java,所以不知道RMI。我将讨论它是如何工作的,谢谢。简单地说,RMI是关于分布式对象的。因此,例如,如果您希望跨4个PEG发送到服务器以检查其有效性,您可以使用方法
checkcomposition(四方PEG)
声明一个远程接口,在服务器端插入必要的实现,这样就可以完成。好的是,您不再需要担心封送/取消封送对象和同步套接字通信,因为它们都隐藏在RMI运行时后面。这并不是最完美的远程处理概念,但对Java用户来说效果非常好。祝你好运
// on the sender
List<Peg> list =
oos.writeObject(list);

// on the receiver
List<Peg> list = (List<Peg>) oid.readObject();