2011-02-16 10 views
4

여러 포트를 수신하고 클라이언트가 말하는 포트에 따라 다른 작업을 수행 할 수있는 Java 프로그램을 만드는 방법을 알아 내려고합니다.여러 포트에서 서버 수신 대기 [Java]

내가 볼 및 기본 클라이언트 - 서버 프로그램을 이해했습니다 http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/

그냥 나는이 같은 관계를 만들려면, 반복하는 대신 서버의 하나 개의 포트에서 수신 한 작업을 할 때 수행을 그것은 입력을받습니다. 여러 포트에서 수신 대기하고 클라이언트가 어떤 포트에 연결하고 데이터를 전송하는지에 따라 다른 작업을 수행합니다.

앞으로 각 포트가 GET 및 PUT 명령을 받아들이도록하고 싶지만, 지금은 청취 할 수있는 서버의 기본 구조를 설정하는 방법을 알아 내려고하고 있습니다. 여러 포트. 나는 인터넷 검색을 시도했지만 많이 찾을 수없는 것 같습니다. 그래서 어떤 도움을 주시면 감사하겠습니다.

미리 감사드립니다. -Anthony

답변

2

소켓은 특정 포트에서만 열 수 있으므로 여러 개의 서버 소켓 (예 : 포트 당 1 개의 소켓)이 필요합니다. I 하나의 소켓에서 네트워크 활동이 다른 활동을 방해하지 않도록 소켓 당 하나의 스레드가 필요하다고 생각하십시오.

학업용으로 서버를 구현하고 있습니까? 그렇지 않다면, 실제로는 과 같이 기존 서버를 사용하는 것이 좋습니다 (예 : Tomcat).

0

물론 여러 개의 서버 소켓을 열 수도 있습니다.

프로토콜을 구현하는 데 도움이되는 jboss netty를보고 싶을 수도 있습니다.

6

앞서 설명한 튜토리얼은 매우입니다. 스레드를 사용하지 않고 합리적인 서버를 작성할 수 없습니다.

new Thread() { 
    public void run() { 
     ServerSocket server = new ServerSocket(6788); 
     while(true) { 
      Socket client1 = server.accept(); 
      //handle client1 
     } 
    }.start(); 

을하고 (다른 포트를 확인할 수) : 두 개의 서버 소켓을하기 위해, 당신은이 (의사)처럼, 각 포트에 대한 새로운 스레드를 생성해야한다

new Thread() { 
    public void run() { 
     ServerSocket server = new ServerSocket(6789); 
     while(true) { 
      Socket client1 = server.accept(); 
      //handle client2 
     } 
    }.start(); 

client1client2를 갖는 소켓을 별도로 처리 할 수 ​​있습니다. 또한 여러 클라이언트에 서비스를 제공 할 수 있도록 다른 스레드에서 클라이언트 연결을 처리해야합니다. 물론이 코드는 많은 중복을 도입하지만 시작점으로 간주합니다.

당신의 목표가 HTTP GET과 PUT을 구현하는 것이라면 서블릿을 사용하고이 모든 허슬에서 벗어나십시오.

+0

코드는 포트 당 하나의 연결 만 허용합니다. 그 후 임의의 시간에 해당 ServerSocket은 가비지 수집되어 닫힙니다. 이것은 일반적으로 TCP 서버를 작성하는 올바른 방법이 아닙니다. – EJP

+0

원본 예제 코드를 편집하여 훨씬 더 오래 사용할 수 있도록 포괄적으로 작성했습니다. 귀하의 의견에 감사드립니다. –

관련 문제