2016-02-10 3 views
0

Это мой первый опыт использования java-сетей. Я должен использовать его для проекта, над которым я работаю, - это простая карточная игра. Мой сервер и клиент свяжутся, поскольку «Полученное соединение» будет распечатано. Но после этой линии возникает следующая ошибка:EOFException в java networking

java.io.EOFException 
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readObject(Unknown Source) 
at ClientConnectionManager.reciveData(ClientConnectionManager.java:49) 
at LogicThread.getHandSize(GameLogic.java:22) 
at LogicThread.run(GameLogic.java:16) 
at java.lang.Thread.run(Unknown Source) 
Exception in thread "Thread-4" java.lang.NullPointerException 
at LogicThread.getHandSize(GameLogic.java:22) 
at LogicThread.run(GameLogic.java:16) 
at java.lang.Thread.run(Unknown Source) 

классы в которых идет речь:

static ObjectInputStream input; 
static ObjectOutputStream output; 
static Socket socket; 

    public static void connectToServer(){ 
    try { 
     System.out.println("connecting"); 
     socket = new Socket(ip, port); 
     input = new ObjectInputStream(socket.getInputStream()); 
     output = new ObjectOutputStream(socket.getOutputStream()); 
     output.flush(); 
     System.out.println("connected"); 
     reciveData(); 
     logic.startLogic(); 
     //listenForData(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static Object reciveData(){ 
    try { 
     Object obj = input.readObject(); - Error is on this line 
     System.out.println(obj); 
     return obj; 
    } catch (ClassNotFoundException | IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Серверный код для передачи данных:

ServerSocket server; 
    server = new ServerSocket(2302); 
    Socket connection; 
    connection = server.accept(); 
    output = new ObjectOutputStream(connection.getOutputStream()); 

    public void sendData(Object data){ 
    try { 
     output.writeObject(data); 
     output.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Я не уверен, что причины этого потому что сервер отправляет «Полученное соединение», которое клиент получает без проблем и отпечатков. Но любой вызов извне метода connectToServer() вызывает ошибку выше.

+1

Нам также нужно увидеть код на стороне сервера. – EJP

+0

@ EJP yea забыли, что просто добавили его –

+3

EOFException - это исключение конца файла. Вы закончили читать все в потоке и попытались прочитать его снова. –

ответ

1

Точка доступа закрыта. Где-то сервер закрывает принятый сокет или один из его потоков.

Это означает, что если сервер действительно вызвал sendData(), он должен был исключить исключение, о котором вы не упомянули.

+0

спасибо, я попробую найти его в код сервера –

+0

Я нашел ошибку, один из классов закрывал соединение –