【问题标题】:ObjectOutputStream not sending data (server stuck at socket.accept())ObjectOutputStream 不发送数据(服务器卡在 socket.accept())
【发布时间】:2014-10-18 19:04:07
【问题描述】:

我正在尝试使用 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();

                    }
                    }

【问题讨论】:

  • 你确定是客户端不工作?
  • 服务器端卡在accept()方法。我推断客户端没有发送任何数据。服务器端会不会有问题?我正在使用线程..
  • 几年前我试图做你正在做的同样的事情,我在对象流中遇到了类似的问题......如果可能的话,我建议使用 JSON 进行序列化,而不是比java对象序列化。
  • 会试一试,因为这令人沮丧。你能给我一个好的链接开始吗?图书馆,也许?干杯
  • 如果服务器已经成功接收并发回了一个SendObject,怎么会卡在accept?连接已被接受很长时间。显示服务器代码。

标签: java sockets outputstream objectoutputstream


【解决方案1】:

两件事:

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

【讨论】:

  • socket 如何在 Java 中工作的令人尴尬的误解。谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多