2013-08-01 2 views
1

클라이언트가 서버의 코어 수를 요청하는 프로그램을 작성하려고합니다.서버/클라이언트 통신이 작동하지 않습니다. java

클라이언트 :

public void actionPerformed(ActionEvent e) { 
      try { 
       Socket clientSocket = new Socket("128.59.65.200", 6789); 
       DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
       BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
       String numberOfCores = inFromServer.readLine();clientSocket.close(); 
       System.out.println(numberOfCores); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

     } 

    }); 

서버 : 내가 서버를로드하고 내 GUI의 버튼을 쳤을 때

public static void sendNumberOfCores() { 
    Thread coresThread = new Thread() { 
     public void run() { 
      try { 
       int numberOfCores; 
       ServerSocket welcomeSocket = new ServerSocket(6789); 
       while (true) { 
        Socket connectionSocket = welcomeSocket.accept(); 
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
        numberOfCores = Runtime.getRuntime().availableProcessors(); 
        outToClient.write(numberOfCores); 
       } 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

    }; 
    coresThread.setName("Wait for core request thread"); 
    coresThread.start(); 
} 
그러나

는, 클라이언트를 실행하는 다음과 같이 나는이 작업을 수행 코드, 아무 일도 일어나지 않고 단추가 막혔다. 이 원인은 무엇입니까?

감사합니다.

+0

UI 스레드에서 소켓 연결을 실행 중이기 때문입니다. 소켓 용 새 스레드를 만들어야합니다. –

+0

서버 및 클라이언트에 동일한 코드를 배치했습니다. – Robadob

+0

죄송합니다. – user760220

답변

0

클라이언트의 코드가 문자열을 기다리고있을 때 정수를 전송한다는 결론을 내 렸습니다.

0
Server not initialized on the 6789 port and make sure you do that in a separate thread. 
Some thing like this. 

In Server class: 
--Make an inner class say MyServer 

    class MyServer implements Runnable{ 
     final int BACKLOG=10; //10 is the backlog,if your server wishes to serve requests. 
     final int PORT = 6789; 
     public void run(){ 
      try { 

         ServerSocket serverSocket = new ServerSocket(PORT,BACKLOG); //10 is the backlog,if your server wishes to serve conncurrent requests. 

       while (true) { 
         Socket ClientConnetion = serverSocket.accept(); 


      //Now whatever you want to do with ClientConnection socket you can call 


       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
} 


--Start this thread in you main server class 

MyServer mys=new MyServer(); 
     Thread r=new Thread(mys); 
     mys.start(); 
관련 문제