2011-12-16 15 views
0

ちょっと、私はクライアントサーバーのチャットに基づいて電子投票システムを実装しています。 私はサーバーを動かすと問題なく実行されますが、印刷もクライアントも実行されません。しかし、私はクライアントに入力を与えるとすぐに、それは私に次の例外とクラッシュを与えます。ここにはサーバーとクライアントのコードがあります。だから、私はエンジンを始めるために何をするべきだと思いますか?java.io.StreamCorruptedException:無効なストリームヘッダー:72657175

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

例外を与えてください。 – Vaandu

+1

コードを重要な部分に分けることはできますか?あなたが書いた他の数百行のコードを読むことに誰も興味がありません。 – BoltClock

+0

私は例外がどこから来る2つの部分を置きます。 @BoltClock –

答えて

0

関連するコードを見ずに、私はあなたが既存のソケットInputStreamのObjectInputStreamを再作成していると思います。ソケットごとにオブジェクトストリームを作成し、ソケット接続が完全に終了するまでオブジェクトストリームを再利用する必要があります。また、デッドロックを避けるため、作成直後に常にObjectOutputStreamをフラッシュしてください。

+0

これらはインスタンス変数であるため、コンストラクタで初期化されます。これがそこにあります。最初の開始 –

+0

@ KarimFakhry - 接続のもう片方はどうですか? – jtahlborn

+0

ねえみんな私は最後に例外を解決することができたと私はなぜそれが来たので、誰もがソリューションを使用する場合、私はそう言いたいと思います 私はDataOutputStreamでStringを送信し、 ObjectInputStreamは、Headerがクラッシュするようにします。 –

関連する問題