Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectOutputStream未发送数据(服务器卡在socket.accept()上)_Java_Sockets_Outputstream_Objectoutputstream - Fatal编程技术网

Java ObjectOutputStream未发送数据(服务器卡在socket.accept()上)

Java ObjectOutputStream未发送数据(服务器卡在socket.accept()上),java,sockets,outputstream,objectoutputstream,Java,Sockets,Outputstream,Objectoutputstream,我正在尝试使用Java通过连接发送对象。这是我的客户端代码。服务器第一次收到数据,但第二次卡在socket.accept()上。我做错什么了吗?谢谢大家! public class Client { public static void main(String args[]) { try { Socket socket =

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

                    }
                    }
两件事:

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

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

    您确定客户端不工作吗?服务器端卡在
    accept()
    方法上。我推断客户端没有发送任何数据。服务器端会有问题吗?我正在使用线程。几年前,我试图做与您正在做的相同的事情,但我在对象流中遇到了类似的问题。。。如果可能的话,我建议使用JSON进行序列化,而不是java对象序列化。我会尝试一下,因为这很令人沮丧。你能给我一个好的开始链接吗?也许是图书馆?CheersHow如果服务器已经成功地接收并发送回SendObject,那么它是否会被困在accept?该连接已被接受很长时间。显示服务器代码。令人尴尬的误解是,
    socket
    如何在Java中工作。非常感谢。