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