J'ai seulement commencé à apprendre Java. Ma tâche consiste à créer un serveur de fichiers qui accepte certaines commandes comme File Get, File Put et File Delete à partir de plusieurs clients utilisant Threading. J'utilise un objet DataObject de classe personnalisée pour sérialiser et envoyer des commandes et toutes les données qui peuvent l'accompagner. Le client doit être rendu interactif en ce sens qu'il implique une saisie manuelle des différentes commandes. Cela signifie que la fonction ObjectInputStream readObject() ne fonctionnera pas dans une boucle while (true) à cause d'une exception EOFException. Que puis-je faire pour que le thread du serveur pauses à readObject() jusqu'à ce qu'il voit l'objet suivant, puis reprend la boucle while (true)?Java: Lecture depuis ObjectInputStream
code au serveur (pistes pour chaque fil séparément):
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 à 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
}
}
Je dois dire que c'est une tâche assez difficile pour une personne qui n'a commencé l'apprentissage de Java. – Roman
Il s'agit d'une mission prévue demain dans un cours sur les systèmes d'exploitation distribués. Java est la langue attendue. – Anand
S'il vous plaît ne pas que je ne ai pas pris la peine de mettre dans la partie catch des gestionnaires d'exception ici, mais ils sont là dans le code. – Anand