【问题标题】:Socket programming, multithreaded game, getting an End Of File Exception套接字编程,多线程游戏,获得文件结束异常
【发布时间】:2013-06-27 20:22:13
【问题描述】:

我正在尝试实现一个小游戏,其中多个客户端必须连接到服务器并一起玩。每个人都有不同的 GUI,它们通过 ClientConnect 类进行通信,这是一个从 GUI 类开始的 Runnable。问题是我在第一行代码中得到一个 EOFException,当我试图对输入流进行 intanciate 时。服务器当然是在一开始就启动并发送一个对象。 这是我得到异常的实现的一部分。

我该怎么办?

 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行是try所在的行

我正在像这样在 GUI 中启动 ClientConnect 线程:

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

【问题讨论】:

    标签: java multithreading sockets networking


    【解决方案1】:

    知道了!

    我有东西阻塞了要打开的服务器套接字!

    【讨论】:

    • 你的解释毫无意义。
    【解决方案2】:

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

    您应该在ObjectInputStream 之前在两端构造ObjectOutputStream

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      相关资源
      最近更新 更多