ObjectOutputStream不发送数据(服务器卡在socket.accept())

时间:2014-08-25 15:18:34

标签: java sockets outputstream objectoutputstream

我正在尝试使用Java通过连接发送对象。这是我的客户端代码。服务器第一次接收数据,但第二次停留在socket.accept()。我在这里做错了吗?谢谢!

  public class Client 
        {
            public static void main(String args[])
            {
                try 
                {
                    Socket socket = new Socket("localhost", 40003);
                    ClientObject c = new ClientObject(socket);
                    c.init();

                } 
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }


        class ClientObject
        {
            Socket socket;

            public ClientObject(Socket socket) 
            {
                this.socket = socket;
            }
            public void init()
            {
                try
                {

                    // computation
                    SendObject so = new SendObject(toSend1, toSend2, rand, username.length());

                    // send all of this
                    OutputStream o = socket.getOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(o);
                    oos.writeObject(so);
                    o.flush();

                    InputStream i = socket.getInputStream();
                    ObjectInputStream ois = new ObjectInputStream(i);

                    // works, data received from the server
                    so = (SendObject)ois.readObject();

                    // further computation
                    so = new SendObject(null, digest, rand + 1, -1);
                    oos.reset();
                    oos.writeObject(so);
                    // doesn't work :(
                    o.flush();

                    }
                    }

2 个答案:

答案 0 :(得分:1)

两件事:

  1. 刷新ObjectOutputStream而不是底层的OutputStream。
  2. 客户端使用相同的流,因此使用相同的连接写入服务器,因此服务器不应该期望第二个accept,而是继续读取相同连接的流。您当然也可以设置一个新的连接(Socket)并通过该套接字发送第二个对象。然后服务器应该accept另一个套接字。

答案 1 :(得分:0)

找我,服务器已成功接受连接,否则您将无法发送和接收。查看服务器代码,问题可能是服务器从客户端收到后关闭()套接字连接。请提供您的服务器代码以供查看。