2014-04-24 14 views
15

Próbuję odczytać ciąg, który jest wysyłany z klienta za pomocą programu Gniazdo, kod w następujący sposób:java.io.StreamCorruptedException: nieprawidłowy nagłówek stream: 54657374

import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.lang.ClassNotFoundException; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class SocketServerExample { 

    //static ServerSocket variable 
    private static ServerSocket server; 
    //socket server port on which it will listen 
    private static int port = 5000; 

    public static void main(String args[]) throws IOException, ClassNotFoundException{ 
     //create the socket server object 
     server = new ServerSocket(port); 
     //keep listens indefinitely until receives 'exit' call or program terminates 
     while(true){ 
      System.out.println("Waiting for client request"); 
      //creating socket and waiting for client connection 
      Socket socket = server.accept(); 
      //read from socket to ObjectInputStream object 
      ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
      //convert ObjectInputStream object to String 
      String message = (String) ois.readObject(); 
      System.out.println("Message Received: " + message); 
      //create ObjectOutputStream object 
      ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 
      //write object to Socket 
      oos.writeObject("Hi Client "+message); 
      //close resources 
      ois.close(); 
      oos.close(); 
      socket.close(); 
      //terminate the server if client sends exit request 
      if(message.equalsIgnoreCase("exit")) break; 
     } 
     System.out.println("Shutting down Socket server!!"); 
     //close the ServerSocket object 
     server.close(); 
    } 

} 

Ale ja dostaję błąd następująco chwilę odczytanie ciągu znaków od klienta:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 54657374 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:803) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) 
    at SocketServerExample.main(SocketServerExample.java:29) 

Szukałem i nie udało mi się znaleźć błędu. Proszę pomóż mi.

+1

Może to duplikat http://stackoverflow.com/questions/2622716/java-invalid-stream-header-problem – richard

+0

może ktoś sprawdzić poniższy link ... etui. http://stackoverflow.com/questions/34435188/java-io-streamcorruptedexception-invalid-stream-header-4920616d – Chandu

Odpowiedz

21

Najwyraźniej nie wysyłasz danych przy użyciu ObjectOutputStream:, tylko piszesz bajty.

  • Jeśli czytasz z readObject() trzeba pisać writeObject().
  • Jeśli czytasz z readUTF() trzeba pisać writeUTF().
  • Jeśli czytasz z readXXX() trzeba pisać writeXXX(), dla większości wartości XXX.
+0

Powyższy format wysyłania iam. Czy to jest poprawne?? – androidGenX

+0

@androidsuckzzz Z pewnością nie. Przeczytaj ponownie moją odpowiedź. – EJP

+0

@androidsuckzzz Aby odczytać obiekt ObjectInputStream, musisz napisać do ObjectOutputStream (lub musisz zrobić to samo, co nie jest zalecane). Nie możesz po prostu pisać do żadnego strumienia i zakładać, że zadziała. –

3

Nie można oczekiwać, że ObjectInputStream będzie automatycznie konwertować tekst na obiekty. Heksadecymalny 54657374 jest "Test" jako tekst. Musisz wysłać go bezpośrednio jako bajty.

Powiązane problemy