2014-08-28 5 views
1

Я хочу отправить String - «HelloWorld», используя ObjectInputStream от клиента к серверу. Сервер получит «HelloWorld» и распечатает его на консоли.отправка строки с использованием ObjectInputStream. Ошибка: OptionalDataException

Оба они соединены между собой на локальный и порт 4445.

я получил сообщение об ошибке на стороне сервера

Error: java.io.OptionalDataException 

Client.java

private ObjectOutputStream output; 
private ObjectInputStream input;  

@Override 
public void run() { 
     try { 
      socket = new Socket("localhost",4445); 
      output = new ObjectOutputStream(socket.getOutputStream()); 
      input = new ObjectInputStream(socket.getInputStream()); 
      output.writeChars("HelloWorld"); 
      output.flush(); 
     } 
} 

Server.java

private ObjectOutputStream output; 
private ObjectInputStream input;  
private Object message; 

@Override 
public void run() {   
    try {  
     output = new ObjectOutputStream(socket.getOutputStream()); 
     input = new ObjectInputStream(socket.getInputStream()); 
     while(true) { 
      try { 
       message =(String)input.readObject(); 
       System.out.println(message); 

      } catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
     } 
    }catch(IOException exception) { 
     System.out.println("Error: " + exception); 
    } 

Я прочитал на эту ошибку, и она утверждает, что это будет сгенерировано исключение, когда

An attempt was made to read an object when the next element in the stream is 
primitive data. In this case, the OptionalDataException's length field is set 
to the number of bytes of primitive data immediately readable from the stream, 
and the eof field is set to false. 

Я совсем потерял после прочтения этого объяснения, так это значит, что вы не можете отправить строковый тип данных с помощью ObjectInputStream?

+0

Возможный дубликат [OptionalDataException в java] (http://stackoverflow.com/questions/8630494/optionaldataexception-in-java) – alfasin

+0

@alfasin Я думаю, что это не дубликат ссылки, которую вы дали , В этом случае OP не понимает, что writeChars не записывает объект. –

ответ

1

Когда вы используете writeChars, вы не пишете Строку, которую вы пишете ряд примитивов. Вместо этого используйте writeObject.

По javaDocs

public void writeChars(String str) 
       throws IOException 
Writes a String as a sequence of chars. 
0

Chars посланных writeChars можно прочитать только несколько readChar. Используйте writeUTF/readUTF вместо