2014-09-29 31 views
-2

此代碼只運行一次。它用於根據其ipv4地址訪問遠程計算機。如何讓這個運行不止一次?

我想讓它隨時可用並運行多次。我應該添加哪些代碼來執行此操作?

public void run() { 

    try { 
     ServerSocket ss = new ServerSocket(6609); 
     Socket s = ss.accept(); 
     System.out.println("connected"); 
     String string = ""; 

     DataInputStream in = new DataInputStream(s.getInputStream()); 
     DataOutputStream out = new DataOutputStream(s.getOutputStream()); 

     string = in.readUTF(); 
     //System.out.println(string); 
     ProcessBuilder pp = new ProcessBuilder("cmd.exe" , "/c" , "cd " + string); 
     Process p = pp.start(); 

     DataInputStream get = new DataInputStream(p.getInputStream()); 

     String str = ""; 

     while((str = get.readLine()) != null) { 
      out.writeUTF(str); 
      System.out.println(str); 
     } 

     System.out.println("Finish server"); 
    } catch(Exception event) { 
     JOptionPane.showMessageDialog(null, event); 
    } 
    //run(); 
} 
+0

第二次發生了什麼?順便說一句,你有一個空的catch(Exception)塊。 *從不*這樣做。打印出例外情況,也許它會告訴你什麼。 – 2014-09-29 11:47:19

+0

thx。我忘了那個。我用一些代碼測試了它。代碼沒有任何反應。一次運行。但一旦我使用循環。它打破了。如果我使用遞歸,更糟。 – 2014-09-29 11:56:22

+1

「壞了」不是問題描述。 '程序失敗'也不是。 – EJP 2014-09-29 11:57:15

回答

0

嘗試關閉結束之後就在服務器連接

如果你想運行的代碼超過一次,你可以在你讀一節100d從流

解決這個問題

+0

呃是的,但程序失敗.....我試過了。與循環是。你能否告訴我應該在哪裏放置循環? – 2014-09-29 11:53:50

+0

omg我做到了。有用。關閉了這兩個套接字並使用了遞歸。它的工作原理。謝謝。^_^ – 2014-09-29 12:20:19

+0

很棒!!!!!!! :)請在這裏發佈您的工作代碼;-) – Sheldon 2014-09-29 12:22:44

0

ServerSocket只能在同一個端口上運行一次,而不會關閉。 如果不是你會得到AWT錯誤, ,如果你真的需要在同一臺機器上運行多個實例(我不知道爲什麼),你可以嘗試在另一個端口中打開另一個服務器套接字。

不是很高雅。