2013-06-27 75 views
0

我试图实现一个小游戏,其中多个客户端必须连接到服务器,并一起玩。每个人都有不同的GUI,他们通过类ClientConnect进行通信,ClientConnect是从GUI类启动的Runnable。问题是我在代码的第一行得到一个EOFException,当我试图intanciate输入流。服务器当然是在开始时发送一个对象。 这是我得到异常的实现的一个切入点。Socket编程,多线程游戏,获取文件结尾异常

我该怎么办?

public ClientConnect(InetAddress address, int port) throws IOException { 
    clientSock = new Socket(address, port);    
} 

@Override 
public void run() { 
    ArrayList<Object> receivedObject = null; 
    try (ObjectInputStream fromServer = new ObjectInputStream(clientSock.getInputStream()); 
      ObjectOutputStream toServer = new ObjectOutputStream(clientSock.getOutputStream())) 
     { 
      while(!move) { 
       receivedObject = (ArrayList<Object>) fromServer.readObject(); 
       move = !(receivedObject.get(0).equals("you have to wait!!")); 
      } 

      actualPlayer = (String) receivedObject.get(0); 
      scoreCard = (List<String>) receivedObject.get(1);   
      highScore = (HashMap<String, Integer>) receivedObject.get(2); 
      numberOfPlayers = (int) receivedObject.get(3);   
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 
} 

这里是个例外:

CShellExt::CShelljava.io.EOFException 
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
at java.io.ObjectInputStream.<init>(Unknown Source) 
at edu.hm.se2.kniffel.ClientConnect.run(ClientConnect.java:41) 
at java.lang.Thread.run(Unknown Source) 
Ext() 

线41与线的尝试

我开始了ClientConnect线程在GUI这样:

public void actionPerformed(ActionEvent arg0) { 
      //Online-Spiel starten 
      if(game.listLength()>0){ 
       try { 
        client = new ClientConnect(InetAddress.getByName(null), 2000); 
        new Thread(client).start(); 
        while (!client.getMove()) { 
         lblActualUser.setText("WAITING.... " + client.getActualPlayer() + " ist an der Reihe"); 
        } 

回答

0

Got it!

我得到了一些阻塞serversocket被打开!

+0

你的解释没有意义。 – EJP

0

在这个证据上,对方根本没有创建一个ObjectOutputStream,它只是连接然后关闭套接字。

您应该在两端的ObjectInputStream之前构建ObjectOutputStream