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

标签 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();

                    }
                    }

最佳答案

有两件事:

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

关于java - ObjectOutputStream 不发送数据(服务器卡在 socket.accept() 处),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489145/

相关文章:

java - 如何使用比较器按降序对列表进行排序(基于薪水,这是一个长值)

java - 使用 Java 将 JSON 文档数组插入 MongoDB 时出错

sockets - Windows Phone 7-如何以编程方式搜索和连接到蓝牙设备

java - DataOutputStream 和 OutputStreamWriter 的区别 : String compatibility?

java - 通过InputStream和OutputStream模拟数据序列

java - 在Windows 10上安装node-java时出现LNK2001错误

java - 使用 Guava Iterables.cycle 作为循环列表实现

c - 代理中的非阻塞套接字和 poll() 怪癖

java - 无法实例化 ObjectInputStream

Java - 如何通过HTTP请求而不是文件读取xls格式数据