2014-09-29 5 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

두 번째는 어떻게됩니까? BTW, 당신은 빈 잡기 (예외) 블록이 있습니다. * 절대로 그렇게하지 마십시오. 예외를 인쇄하십시오. 아마 뭔가를 말해 줄 수 있습니다. –

+0

thx. 나는 그것을 잊었다. 몇 가지 코드로 테스트했습니다. 코드에는 아무런 변화가 없습니다. 한 번만 perfetly 실행됩니다. 하지만 일단 루프를 사용합니다. 그것은 망 쳤다. 재귀를 사용하면 나 빠지게됩니다. –

+1

'파산'은 문제에 대한 설명이 아닙니다. 프로그램이 실패하지도 않습니다. – EJP

답변

0

봅니다 마무리 서버 후 연결을 닫습니다

또는

당신이 스트림

에서 읽기 주위들 (100d)와 함께이 문제를 해결 할 수있는 코드를 한 번 이상 실행하려면

+0

어 그래,하지만 프로그램이 실패 했어. 나는 노력했다. 그 루프가 있습니다. 루프를 어디에 두어야하는지 알려주시겠습니까? –

+0

나는 그것을했다. 그것은 작동합니다. 두 소켓을 모두 닫고 재귀를 사용했습니다. 작동합니다. 고마워.^_^ –

+0

대단한 !!!!!!! :) workin 코드를 여기에 게시하십시오 ;-) – Sheldon

0

ServerSocket은 닫히지 않고 동일한 포트에서 한 번만 실행할 수 있습니다. AWT 오류가 발생하는 경우 같은 시스템에서 실행중인 인스턴스가 두 개 이상 필요하면 (이유를 모르겠다) 다른 포트에서 다른 서버를 열어 볼 수 있습니다.

정말 우아하지 않습니다.

관련 문제