java.io.EOFException, wenn Sie versuchen zum ausführen von java-socket-Operationen
Ich bin immer die folgende Ausnahme für die Sie den code unten enthalten. Dies funktioniert gut, wenn die while () - Schleife ist ausgeschlossen. Warum ist das so?
Oct 6, 2011 1:19:31 AM com.mytunes.server.ServerHandler run
SEVERE: null
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at com.mytunes.server.ServerHandler.run(ServerHandler.java:68)
Klasse ServerHandler:
public class ServerHandler extends Thread {
.
.
.
public ServerHandler(...){
...
}
public void run(){
try {
os = s.getOutputStream();
oos = new ObjectOutputStream(os);
is = s.getInputStream();
ois = new ObjectInputStream(is);
while(true){
msg = (Messenger) ois.readObject();
String methodType = msg.getKey();
//validating various data passed from the serialized object
if(methodType.equals("validateCard")){
} else if(methodType.equals("validatePIN")){
}
}
} catch (SQLException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} finally{
try {
ois.close();
is.close();
oos.close();
os.close();
s.close();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Klasse Server
public class Server{
...
ServerSocket ss;
...
public static void main(String args[]){
Server server = new Server();
server.init();
}
public void init(){
try {
System.out.println("Server started...");
ss = new ServerSocket(port);
System.out.println("Listening on " + ss.getInetAddress() + ":" + ss.getLocalPort());
System.out.println("Waiting for clients...");
while(true){
Socket incoming_socket = ss.accept(); //returns a Socket connection object if received
new ServerHandler(...).start();
}
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
InformationsquelleAutor coder9 | 2011-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Halten Sie zu Lesen versucht, Objekte immer, nie brechen aus der Schleife. Wenn der client die Verbindung schließt, wird der Strom der Daten, und die
ObjectInputStream.readObject
Methode wirft die Ausnahme, dass Sie sehen.Wie viele Objekte haben Sie erwarten, dass in den stream, und warum Lesen Sie über das Ende von Ihnen?
Generell ist es in Ordnung zu tun, die Art der Kommunikation, aber Sie werden wahrscheinlich brauchen, um zu wissen, Wann man aufhören... es ist mir nicht klar, dass
ObjectInputStream
gibt Sie, die Informationen schnell und einfach. (Ich sollte Sie warnen, dass Java die binäre Serialisierung ist in der Regel problematisch in verschiedener Weise - ich würde erwägen, so etwas wie Protocol Buffers, wenn ich du wäre.)Vielleicht sollte ich stick mit diesem jetzt, da diese nur für eine wissenschaftliche Arbeit 🙂 vielen Dank.
ist es möglich so viel zu wissen auf Java und noch nicht deine Hauptsprache?(Ich habe gesehen, Sie sind in C#).Ich bin kämpfen, einfach nur gut zu sein in 1 Sprache.Wie tun Sie dies?(Fragt immer, Wege zu finden, um mich selbst zu verbessern).
Verbringen eine Menge Zeit hier hilft - und das obwohl ich Liebe, C#, Java ist der, den ich verwenden Professionell. Ich bin nur ein begeisterter amateur in C# 🙂
InformationsquelleAutor Jon Skeet