Java: Lesen von ObjectInputStream
Habe ich nur angefangen, Java zu lernen. Meine Aufgabe ist es, erstellen Sie eine Datei-server die akzeptiert, dass bestimmte Befehle wie Datei, Datei Setzen und Löschen von Dateien von mehreren clients verwenden von Threading. Ich bin mit einem benutzerdefinierten Klasse DataObject zum serialisieren und senden von Befehlen und Daten, kann zusammen mit ihm. Der Kunde wird interaktiv in dem Sinne, dass es eine manuelle Benutzereingabe der verschiedenen Befehle. Dies bedeutet, dass ObjectInputStream readObject () - Funktion funktioniert nicht in einer while(true) - Schleife, da eine EOFException. Was kann ich tun, damit der server-thread hält beim readObject (), bis er sieht, das nächste Objekt, und dann erneut die while(true) - Schleife?
Code auf dem server (läuft für jeden thread separat):
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
try{
is = new ObjectInputStream(clientSocket.getInputStream());
os = new ObjectOutputStream(clientSocket.getOutputStream());
while (true) {
input = (DataObject) is.readObject();
//System.out.println("Input has been read");
output = CommandProcessor.process(input);
if(output.data == null) {
os.writeObject(output);
if(output.message.compareToIgnoreCase("Rsp Bye")==0){
clientSocket.close();
}
}
}
}
Code auf dem client:
public Talker() {
DataObject input = new DataObject(0), output = new DataObject(0);
try {
log = new PrintStream("/home/meher/log.txt");
InetAddress serverAddress = InetAddress.getByName("127.0.0.1");
Socket serverSocket = new Socket(serverAddress, port);
os = new ObjectOutputStream(serverSocket.getOutputStream());
is = new ObjectInputStream(serverSocket.getInputStream());
CommandExecuter.Hello(output);
write(output);
read(input);
while(not-end-of-user-input){ //Yet to code this part
//Execute commands
}
}
- Ich muss sagen, dass es eine ziemlich schwierige Aufgabe für eine person, die 'nur angefangen, Java zu lernen'.
- Es ist eine Aufgabe fällig, morgen in einer Verteilten Betriebssystemen selbstverständlich. Java ist die Sprache, erwartet.
- Bitte nicht, dass ich nicht die Mühe putting in den catch-Teil der Exception-Handler hier, aber Sie sind es in den code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
EOFException ausgelöst wird readObject wenn der stream endet. In deinem Fall, wenn der client schließt die Verbindung. Also, wenn der client sendet ein Objekt an den server und beendet sofort, der server liest ein Objekt und erhalten EOFExcpetion das nächste mal, wenn er versucht zu Lesen, ein Objekt, auf das nun geschlossene Verbindung.
Vielleicht fügen Sie ein QUIT-Kommando, in denen Sie beide einig, um die Verbindung zu beenden?
Lösung fügen Sie einen scanner, um die Eingabe einige Daten ..auf das schreiben der Objekt-Seite ...das hält den thread am Leben und verfügbar wird es warten, bis die Eingabe .....
Server-code
client-code