2014-12-19 2 views
-2

현재 다중 스레드 서버를 구축해야하는 프로젝트에서 작업 중입니다. 스레드로 작업하기 시작 했으므로 저를 이해해주십시오.다중 스레드 Java 서버

지금까지 Runnable 객체를 구현하는 클래스가 있습니다. 아래 코드는 Runnable 객체가 제공하는 실행 메소드에 대한 코드입니다.

public void run() { 

    while(true) { 
     try { 
      clientSocket = serversocket.accept(); 

      for (int i = 0; i < 100; i++) { 
       DataOutputStream respond = new DataOutputStream(clientSocket.getOutputStream()); 
       respond.writeUTF("Hello World! " + i); 
       try { 
        Thread.sleep(1000); 
       } catch(InterruptedException e) { 
        // 
       } 
      } 
     } catch(IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

벨로우는 서버 클래스의 새 개체를 만들고 위협을 만드는 주요 방법입니다. 스레드를 초기화합니다.

public static void main(String args[]) { 
    new Thread(new Server(1234, "", false)).start(); 
} 

나는 새로운 스레드를 생성하지만 동시에 여러 클라이언트를 제공하지 않는다는 것을 알고 있습니다. 첫 번째 클라이언트는 두 번째 클라이언트가 연결될 때 연결을 닫아야합니다. 한 번에 다른 클라이언트 소켓을 제공 할 다중 서버를 어떻게 만들 수 있습니까? clientSocket = serverSocket.accept();

+1

당신은 Runnable을 구현하는 헬퍼 클래스를 만들 수 있는데 그 하나의 사용자에 대한 데이터 스트림 상호 작용을 처리합니다. 그런 다음 주 클래스에서 각 소켓 수락과 함께이 도우미 클래스를 생성하고 자체 스레드에서 실행하십시오. 이 작업을 수행하는 데 ThreadPool을 사용하는 것이 가장 좋습니다. 오라클에 의한 자습서를 포함하여이 바로 가기에 대한 자습서가 있습니다. 아직 찾지 못했음에 놀랐습니다. 꽤 놀랐습니다. –

+1

ServerSockets에 대한 자습서를 검색하십시오. 이 주제에 대한 각 좋은 자습서는 솔루션에 대한 문제점을 설명 할 것입니다. – mschenk74

+1

검색어에 대한 작업이 필요할 수 있습니다. 다음 Google 검색을 시도해보십시오. [java socket communications tutorial multithreaded] (https://www.google.com/?gws_rd=ssl#q=java+socket+communications+tutorial+multithreaded). 또는 내 링크를 클릭하십시오. 첫 번째 히트. –

답변

2

예에 스레드를 생성합니까? 워드 프로세서에서

:

지원하는 여러 클라이언트

우리는 수신하고 하나의 연결 요청을 처리하도록 설계, 단순 KnockKnockServer 예를 유지합니다. 그러나 여러 클라이언트 요청이 동일한 포트에 전달 될 수 있으며, 결과적으로 동일한 ServerSocket에 들어올 수 있습니다. 클라이언트 연결 요청은 포트에서 대기하므로 서버는 순차적으로 연결을 받아 들여야합니다. 그러나 서버는 스레드 (각 클라이언트 연결 당 하나의 스레드)를 사용하여 동시에 서비스를 제공 할 수 있습니다.

같은 서버 로직의 기본 흐름이있다 :

while (true) { 
    accept a connection; 
    create a thread to deal with the client; 
} 

스레드로부터 판독하고, 필요에 따라 클라이언트 접속을 쓴다.

https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

+0

링크 주셔서 감사합니다. –