我只開始學習Java。我的任務是創建一個文件服務器,該文件服務器使用線程處理從多個客戶端接受文件獲取,文件放置和文件刪除等特定命令。我正在使用自定義的類DataObject來序列化和發送命令以及可能伴隨的任何數據。客戶端應該是交互式的,因爲它涉及手動用戶輸入各種命令。這意味着由於EOFException,ObjectInputStream readObject()函數在while(true)循環中不起作用。我該怎麼做,以便服務器線程在readObject()處暫停,直到它看到下一個對象,然後恢復while(true)循環?在服務器Java:從ObjectInputStream讀取
代碼(爲每個線程運行單獨):
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();
}
}
}
}
代碼在客戶端:當流結束
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
}
}
我應該說,這是對一個人誰「纔開始學習Java的一個相當艱鉅的任務。 – Roman 2010-09-26 16:42:07
這是明天在分佈式操作系統課程中完成的任務。 Java是預期的語言。 – Anand 2010-09-26 16:51:08
請不要因爲我沒有打擾把異常處理程序的catch部分放在這裏,但他們在代碼中。 – Anand 2010-09-26 17:06:20