即使在刷新outputstream之后,在套接字编程中抛出EOFEException的Java程序

即使在刷新outputstream之后,在套接字编程中抛出EOFEException的Java程序,java,sockets,network-programming,objectinputstream,objectoutputstream,Java,Sockets,Network Programming,Objectinputstream,Objectoutputstream,这是错误的完整跟踪 java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2792) at java.io.ObjectInputStream.readS

这是错误的完整跟踪

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2792)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
    at mypackage.JChatComm.receiveMessage(JChatComm.java:83)
    at mypackage.JThread.run(JThread.java:19)
    at java.lang.Thread.run(Thread.java:701)
这是我的sendMessage程序 此程序是发送消息的主程序。它总是能够正常地冲洗输出流。但receiveMessage仍在抛出错误

public boolean sendMessage() throws IOException{
        try{
            System.out.println("3");

        final String msg;
        if (type.equals("c")){
            msg = cp.tf.getText();
        }
        else msg = tab.tf.getText();
        System.out.println(msg);
        JPacket j1 = new JPacket(msg);
        OutputStream outToServer = client.getOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(outToServer);
        out.writeObject(j1);
        System.out.println("13");
        out.flush();
        System.out.println("12");

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                if (type.equals("s")){
                    tab.ta.append("You: "+msg+"\n");
                    tab.tf.setText("");
                }
                else {
                    System.out.println("Client");
                    cp.ta.append("You: "+msg+"\n");
                    cp.tf.setText("");
                }
            }
        });
        if(msg.equals("End Chat")) {
            endChat();
            return false;
        }
        else
            return true;
    }
    catch (Exception ea){
        ea.printStackTrace();
        System.out.println("7");
        return false;
    }
}

我每次都刷新对象输出流,但它仍然抛出相同的错误

不要为每条消息创建新流。在套接字的生命周期的两端使用单个ObjectNoutStream和ObjectOutputStream。这些流都有流头,重新创建它们只是一个完全不同步的机会。

客户端大概是套接字?如果它是同一个套接字,那么您写入它的内容将发送到服务器,而不是发送到同一个套接字的输入流。实际上,这两个方法都是类的一部分,一次客户端套接字是由
新套接字实例化的客户端套接字。connect(ip,端口)
和其他时间在不同的运行中,它是通过接受serversocket的连接来实例化的。
public boolean sendMessage() throws IOException{
        try{
            System.out.println("3");

        final String msg;
        if (type.equals("c")){
            msg = cp.tf.getText();
        }
        else msg = tab.tf.getText();
        System.out.println(msg);
        JPacket j1 = new JPacket(msg);
        OutputStream outToServer = client.getOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(outToServer);
        out.writeObject(j1);
        System.out.println("13");
        out.flush();
        System.out.println("12");

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                if (type.equals("s")){
                    tab.ta.append("You: "+msg+"\n");
                    tab.tf.setText("");
                }
                else {
                    System.out.println("Client");
                    cp.ta.append("You: "+msg+"\n");
                    cp.tf.setText("");
                }
            }
        });
        if(msg.equals("End Chat")) {
            endChat();
            return false;
        }
        else
            return true;
    }
    catch (Exception ea){
        ea.printStackTrace();
        System.out.println("7");
        return false;
    }
}