java.io.StreamCorruptedException:无效的流头:72657175

java.io.StreamCorruptedException:无效的流头:72657175,java,sockets,Java,Sockets,嘿,我正在实现一个基于客户机-服务器聊天的电子投票系统。 当我运行服务器时,它运行没有任何问题,但也没有打印,客户端也没有。但是,一旦我向客户机提供输入,它就会出现以下异常并崩溃。这是服务器和客户端的代码。那么你认为我应该怎么启动引擎呢 package engine; import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.Calendar; import java.util.Co

嘿,我正在实现一个基于客户机-服务器聊天的电子投票系统。 当我运行服务器时,它运行没有任何问题,但也没有打印,客户端也没有。但是,一旦我向客户机提供输入,它就会出现以下异常并崩溃。这是服务器和客户端的代码。那么你认为我应该怎么启动引擎呢

    package engine;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;

public class Server {
ServerSocket server;
int port = 6000;

public Server() {
    try {
        server = new ServerSocket(6000);
    } catch (IOException e) {
        e.printStackTrace();
    }
}


public void handleConnection(){
    try {
        while(true){
            Socket connectionSocket;
            connectionSocket = server.accept();
            new ConnectionHandler(connectionSocket);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    Server server = new Server();
    server.handleConnection();
}
}    
class ConnectionHandler implements Runnable {
Socket connectionSocket;
Calendar votingStartTime;
Calendar votingEndTime;
boolean timeUp;
ObjectInputStream inFromClient;
ObjectOutputStream outToClient;
BufferedWriter outToFile;
BufferedReader inFromAdmin;
ArrayList<SingleClient> clients = new ArrayList<SingleClient>();
ArrayList<Candidate> candidates;
这是客户机的主要方法,只要我给出输入,就会出现异常:

public static void main(String[] args) throws Exception {
    client c = new client();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input;
    while(true){
        input = br.readLine();
        if(input.equals("0")){
            c.register();
        }else if(input.equals("1")){
            c.login();
        }else if(input.equals("2")){
            c.listCandidates();
        }else if(input.equals("3")){
            c.vote();
        }else if(input.equals("4")){
            c.checkResults();
        }else if(input.equals("5")){
            c.checkFinalResults();
        }else if(input.equals("6")){
            c.logout();
        }else {
            break;
        }
    }
}
}

在没有看到相关代码的情况下,我猜您正在现有套接字InputStream上重新创建ObjectInputStream。必须为每个套接字创建一次对象流,并重复使用它们,直到完全完成套接字连接。此外,您应该始终在创建后立即刷新ObjectOutputStream以避免死锁。

您可以将代码缩减到重要部分吗?没有人对阅读您编写的其他几百行代码感兴趣。我将异常的两个部分放在这里@Boltclockon@Vanathi的问题例外名称和附带的数字是问题名称。您需要显示创建流的代码和使用流的代码。我目前看到的是前者中的一些,而不是后者。这些都是在构造函数中初始化的,因为它们是实例变量。这是第一个initilization@KarimFakhry-连接的另一端呢?嘿,伙计们,我想说我终于能够解决这个异常,我发现了它为什么会出现,所以我想说,如果每个人都使用这个解决方案,我通过DataOutputStream发送字符串,并尝试通过ObjectInputStream接收它,所以头球碰撞。
public static void main(String[] args) throws Exception {
    client c = new client();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input;
    while(true){
        input = br.readLine();
        if(input.equals("0")){
            c.register();
        }else if(input.equals("1")){
            c.login();
        }else if(input.equals("2")){
            c.listCandidates();
        }else if(input.equals("3")){
            c.vote();
        }else if(input.equals("4")){
            c.checkResults();
        }else if(input.equals("5")){
            c.checkFinalResults();
        }else if(input.equals("6")){
            c.logout();
        }else {
            break;
        }
    }
}
}