jbr*_*nan 5 java sockets multithreading android objectinputstream
我有一个我正在制作的客户端 - 服务器应用程序,在阅读服务器上的对象时遇到了一些麻烦.
在我的服务器连接到客户端套接字后,我构建对象输入和输出流并将它们传递给我的service()方法.在那里,我应该处理来自客户端的不同类型的消息.我可以从客户端(即Message我的设计的一个对象)得到一条消息就好了.但是,当然,我想要做的就是有一个循环,这样我就可以得到一条消息,处理它并回复.
到目前为止,我的代码仅适用于单个消息.当我添加循环时,每次迭代都发生了什么,我的服务器只是一遍又一遍地读取相同的消息,然后我的客户端有机会通过套接字发送新消息(我认为这是正在发生的事情,至少) .
所以我真正需要做的是弄清楚如何使我的service()方法等待新的输入.有任何想法吗?或者我接近这个错误?我是否需要在每次迭代时创建一个新的OIS或......?一些代码:
public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {
_shouldService = true;
while (_shouldService) {
// It just keeps reading the same message over and over
// I need it to wait here until the client sends a new message
// Unless I'm just approaching this all wrong!
NetworkMessage message = (NetworkMessage) input.readObject();
NetworkMessageHeader header = message.getHeader();
String headerType = header.getType();
if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
doLoginForMessage(message, output);
} else if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeFiles)) {
doFilesList(message, output);
} else {
System.out.println("Unrecognized header type: " + headerType);
}
}
}
Run Code Online (Sandbox Code Playgroud)
ObjectOutputStream 缓存对象表示,并且不会检测您是否从客户端一遍又一遍地重新发送同一实例,但其中发生了变化。如果这是您的情况,您需要reset在每次发送之前调用流。
NetworkMessage message = new NetworkMessage();
for(;;) {
message.setProperty(whatever);
oos.reset();
oos.writeObject(message);
}
Run Code Online (Sandbox Code Playgroud)