java.io.StreamCorruptedException: неверный заголовок потока: 72657175 - PullRequest
0 голосов
/ 16 декабря 2011

Эй, я внедряю систему электронного голосования на основе чата клиент-сервер.Когда я запускаю сервер, он работает без проблем, но без печати, а также с клиентом.Но как только я передаю входные данные клиенту, он выдает мне следующее исключение и вылетает.Вот код сервера и клиента.Итак, что вы думаете, я должен сделать, чтобы запустить двигатель?

    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 ConnectionHandler(Socket socket) {
    try {
        this.connectionSocket = socket;
        votingStartTime = new GregorianCalendar();
        outToClient = new ObjectOutputStream(
                connectionSocket.getOutputStream());
        inFromClient = new ObjectInputStream(
                connectionSocket.getInputStream());
        inFromAdmin = new BufferedReader(new InputStreamReader(System.in));
        startVotingSession();
        Thread t = new Thread(this);
        t.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

и это основной метод клиентаИсключение, как только я введу:

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;
        }
    }
}
}

1 Ответ

0 голосов
/ 16 декабря 2011

не видя соответствующего кода, я бы предположил, что вы воссоздаете ObjectInputStream в существующем сокете InputStream. Вы должны создавать потоки объектов один раз для каждого сокета и использовать их повторно, пока не закончите с подключением к сокету. Кроме того, вы всегда должны очищать ObjectOutputStream сразу после создания, чтобы избежать тупика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...