2014-10-28 3 views
-1

Я делаю пару серверов клиентов. Мой клиент очень хорошо подключается к серверу и создает ObjectInputStream (socket.getInputStream()) через сокет, от сервера к клиенту и наоборот. Тогда по какой-то мистической причине мой ObjectInputStream сервера каким-то образом ловит нулевой объект. Клиент не отправил ничего через сокет (я положил/../над методом отправки объекта, чтобы сделать это уверенным и даже System.out.printed все отправленные ранее объекты). Сервер ловит этот мистический объект только один раз и после чего все объекты, отправленные клиентом, работают так же, как они должны.Java ObjectInputStream (socket.getInputStream()) ловит нулевой объект

class ClientThread extends Thread { 
     //The socket where to listen/talk 
     Socket socket; 
     ObjectInputStream sInput; 
     ObjectOutputStream sOutput; 
     InputStream fInput; 
     OutputStream Output; 
     //my unique id (easier for deconnection) 
     int id; 
     //Objects that we will be receiving 
     Incomingdata datain; 
     //the date we connect 
     String date; 
     Player player; 
     boolean Connected = false; 

     //Constructor 
     ClientThread(Socket socket){ 
      id = uniqueId++; 
      this.socket = socket; 
      try{ 
       sOutput = new ObjectOutputStream(socket.getOutputStream()); 
       sInput = new ObjectInputStream(socket.getInputStream()); 
       Output = socket.getOutputStream(); 
      } catch (Exception e){ 
       System.out.println("Couldn't create Input/Output streams"); 
      } 
      date = new Date().toString(); 
     } 

     // what will run forever 
     public void run() { 
      // to loop until LOGOUT 
      Connected = true; 
      while(Connected) { 
       try { 
        datain = (Incomingdata) sInput.readObject(); //<--- this catches the mystical null! Even if nothing is sent over the socket? 
       } 
       catch (IOException e) { 
        TextArea.AddLine("Exception reading Streams: " + e); 
        break;    
       } 
       catch(ClassNotFoundException e2) { 
        break; 
       } 
+0

Как я объяснял кому-то другой день, объект и данные ввода/вывода потоки технологии из ушедшей в то время как все еще существовали такие проблемы, как «большой конец» и «малопонятный», и не было хороших стандартов связи. Теперь у нас есть XML и JSON. Они являются гораздо лучшим решением, чем использование потоков объектов. – ControlAltDel

+1

. Думаю, это не ответ на мой вопрос? – user3738243

+0

Похоже, проблема исчезла так же странно, как появилась! – user3738243

ответ

0

Вы можете получить только нуль, если вы отправляете нуль.

(Существует распространенное заблуждение, что readObject() возвращает нулевое значение в конце потока. Это не так.)

Смежные вопросы