Socket Dynamische Klasse von ObjectOutputStream lesen.

eclipseworker

Bekanntes Mitglied
Ich habe einen Socketserver der eine dynamische Klasse entgegen nehmen sollen, wirft aber einen Error, wie fixe ich das?

Java:
@SuppressWarnings("unchecked")
Request<ProductA> req=(Request<ProductA>) in.readObject();
bye=req.isShutdown();     
price=calc.newPrice(req.getPrice(), req.getType()); 
System.out.println("ProductA response!");
out.writeObject("Your ProductA "+req.getName()+" final price is "+price+".");
out.flush();
 
@Robat zwei Dumme, ein Gedanke... 😀
Ok hier der StackTrace:
Code:
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 server.ServerThread.run(ServerThread.java:45)
        at java.lang.Thread.run(Unknown Source)
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 server.ServerThread.run(ServerThread.java:37)
        at java.lang.Thread.run(Unknown Source)
nun ja der Request ist nur impotiert aber daran kann es ja nicht liegen, oder?
 
Also es gibt verschiedene Gründe für eine EOFException..
Ein Grund kann sein, dass du versuchst Daten mittels readObject() zu lesen, die nicht existieren (weil zB Verbindung schon getrennt o.ä.)
Kannst du in einem kurzen Beispiel zeigen, wie lesen / schreiben bei dir aussieht und wann die Verbindung getrennt wird?
 
Also es gibt verschiedene Gründe für eine EOFException..
Ein Grund kann sein, dass du versuchst Daten mittels readObject() zu lesen, die nicht existieren (weil zB Verbindung schon getrennt o.ä.)
Kannst du in einem kurzen Beispiel zeigen, wie lesen / schreiben bei dir aussieht und wann die Verbindung getrennt wird?
Die Verbindung sollte eigentlich nicht getrennt werden:
ClientSeite:
Java:
try ( Socket prodASocket = new Socket(host, paport);
ObjectOutputStream outpa= new ObjectOutputStream(prodASocket.getOutputStream());
ObjectInputStream inpa=new ObjectInputStream(prodASocket.getInputStream());
//andere Server
) {
Request<ProductA> request1;
String fromUser=sc.nextLine();
String response;
while(!fromUser.trim().equalsIgnoreCase("bye")){
   if(fromUser.toLowerCase().startsWith("product a:"){
   request1=produceOrder(fromUser.substring(10));
System.out.println("Ordering "+request1); outpa.writeObject(request1);
outpa.flush();
response=inpa.readUTF();
System.out.println("Response from Server: "+response+".");
}else{
//...
}
fromUser=sc.nextLine();
}
outpa.writeObject(new ShutdownRequest<ProductA>());
outpa.flush();
//shutdown auch für andere Server
} catch (UnknownHostException e) {
                System.err.println("Don't know about host " + host);
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for the connection to " +host);
                System.exit(1);
            }
ServerSeite:
Siehe oben. 😉
 
Zuletzt bearbeitet:
Okay .. folgendes du musst auf Sender und Empfängerseite mit den gleichen Methoden arbeiten (siehe den Abschnitt wo du den String sendest)...also:
entweder readUTF() und writeUTF(..)
oder readObject() und writeObject(..)

Problem wird sicherlich damit zusammenhängen, dass writeUTF ein spezielles, modifiziertes UTF-8 Format benutzt und den String dahingehend umwandelt. Beim Auslesen muss das natürlich beachtet werden.
 

Neue Themen


Zurück
Oben