2012-02-01 81 views
0

客户端代码:的ObjectOutputStream不发送数据

try { 
      Socket socket = new Socket(ip, port); 
      OutputStream output = socket.getOutputStream(); 
      ObjectOutputStream out = new ObjectOutputStream(output); 
      InputStream input = socket.getInputStream(); 
      ObjectInputStream in = new ObjectInputStream(input); 
      out.writeByte(1); 
      FileHandler fh = (FileHandler) in.readObject(); 
      //processing stuff 
      out.flush(); 
      out.close(); 
      output.flush(); 
      output.close(); 
      input.close(); 
      in.close(); 
      socket.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Server代码:

 try { 
      ServerSocket server = new ServerSocket(port); 
      Socket socket = server.accept(); 
      InputStream input = socket.getInputStream(); 
      ObjectInputStream in = new ObjectInputStream(input); 
      int type = in.readByte(); 
      //processing stuff (which includes closing the streams and sending FileHandler object) 
      socket.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

服务器永远不会接收的字节。它只是等待来自客户端的字节,它永远不会来。我不确定它为什么不发送或收到。任何帮助深表感谢。

回答

3

如果我不得不猜测这是因为在你的客户端你阻止​​等待服务器发送给你一些东西,因此从来没有刷新输出流......因此没有发送任何东西。

将您的读取移动到您刷新您的输出流。

+0

也不要冲洗或关闭输出。如果你包装一个OutputStream,调用close或者flush或者close关闭它将依次刷新包含的流。您不需要保存对输出或输入的引用。关闭应该放在finally子句中,如果抛出异常,你仍然需要确保close()流发生。 – chubbsondubs 2012-02-01 06:08:46

+0

当我在发送字节后刷新时,服务器会收到连接重置错误。 – Stripies 2012-02-01 06:09:17

+0

@JonMannerberg - 不,它会在你关闭连接时得到。在完成阅读和写作之前,不要关闭它。 – 2012-02-01 06:10:51