2013-05-29 30 views
4

我的目标是基于Java套接字 实现一个简单的请求 - 响应模式,用于从服务器请求一个对象。Java套接字:请求 - 响应模式与对象流

它应该是这样的:

  1. 客户端发送消息到服务器,服务器计算。根据他收到的 ,调用某个函数。这部分工作。
  2. 服务器将请求的数据写入ObjectOutputStream。这也适用,至少 我没有收到错误。
  3. 客户端从输入流中读取数据,直到他收到一条CLOSE消息,这使得 程序退出while循环。这不起作用,因为它应该。

这里有一些关键代码片段:

// Client (Sending request) *** WORKS 

objectOutputStream.writeInt(GET_OBJECT); 
objectOutputStream.flush(); 


// Server (After receipt of the message) *** WORKS 
objectOutputStream.writeInt(object); 
objectOutputStream.writeInt(CLOSE); 



// Client (Reading the answer from the server) *** WRONG 

while(true){ 
int i = objectInputStream.readInt(); 
if(i == CLOSE) 
break; 
} 
+0

它是什么返回了'i'的价值?如果有的话 – greedybuddha

+0

你好!它没有返回。但是,正如Marko注意到我已经忘记了服务器上的flush()。 – user1812379

回答

2
  1. 你必须flush在客户端侧,并且由服务器接收到的消息;
  2. 您在服务器端缺少flush,并且该消息未被客户端接收。

我注意到这两个事实的模式...

+0

谢谢。它现在有效,但仍然非常不可靠。有时我从服务器收到消息,有时不会。 – user1812379

+0

@ user1812379每次从写入切换到读取时,都需要刷新。 – EJP