자바 소켓프로그래밍 예제

이 자습서에서는 TCP/IP 네트워크를 통해 소켓 프로그래밍에 대한 소개를 제시하고 Java에서 클라이언트/서버 응용 프로그램을 작성하는 방법을 보여 줍니다. UDP는 주류 프로토콜이 아니기 때문에 자주 발생하지 않을 수 있습니다. 동시에 여러 클라이언트를 서비스할 수 있도록 KnockKnockServer를 수정합니다. KKMultiServer와 KKMultiServerThread의 두 클래스가 솔루션을 구성합니다. KKMultiServer는 서버 소켓에서 클라이언트 연결 요청을 수신 대기하여 영원히 반복됩니다. 요청이 들어오면 KKMultiServer는 연결을 수락하고, 처리하는 새 KKMultiServerThread 개체를 만들고, 수락에서 반환된 소켓을 건네주며, 스레드를 시작합니다. 그런 다음 서버가 연결 요청을 수신 대기로 돌아갑니다. KKMultiServerThread 개체는 소켓을 읽고 작성하여 클라이언트와 통신합니다. 새로운 노크 노크 서버 KKMultiServer를 실행 한 다음 연속으로 여러 클라이언트를 실행합니다. 소켓 프로그래밍에 사용할 수 있는 두 가지 통신 프로토콜은 UDP(사용자 데이터그램 프로토콜)와 전송 제어 프로토콜(TCP)입니다. 이를 수행하는 방법은 다른 스레드에서 클라이언트가 요청하는 모든 새 클라이언트 및 서비스에 대해 새 소켓을 만드는 것입니다.

동시에 제공되는 클라이언트 수는 실행 중인 스레드 수와 동일합니다. 이 예제는 독립적으로 실행되는 두 개의 Java 프로그램( 클라이언트 프로그램과 서버 프로그램)으로 구성됩니다. 클라이언트 프로그램은 단일 클래스인 KnockKnockClient에 의해 구현되며 이전 섹션의 EchoClient 예제와 매우 유사합니다. 서버 프로그램은 두 가지 클래스에 의해 구현된다: KnockKnockServer 와 KnockKnockProtocol. EchoServer와 유사한 KnockKnockServer는 서버 프로그램의 주요 방법을 포함하고 포트를 듣고, 연결을 설정하고, 소켓에서 읽고 쓰는 작업을 수행합니다. 클래스 KnockKnockProtocol 농담을 제공합니다. 그것은 현재 의 농담을 추적, 현재 상태 (노크 를 보내, 단서를 전송, 등등), 현재 상태에 따라 농담의 다양한 텍스트 조각을 반환합니다. 이 개체는 클라이언트와 서버가 통신하는 데 사용하기로 동의한 언어인 프로토콜을 구현합니다. 서버 측에서 accept() 메서드는 클라이언트의 소켓에 연결된 서버의 새 소켓에 대한 참조를 반환합니다. accept 메서드는 클라이언트가 시작되고 이 서버의 호스트 및 포트에 대한 연결을 요청할 때까지 기다립니다. (knockknockserver.example.com라는 컴퓨터에서 서버 프로그램 KnockKnockServer를 실행했다고 가정해 보겠습니다.) 이 예제에서 서버는 첫 번째 명령줄 인수에 의해 지정된 포트 번호에서 실행됩니다.

연결이 요청되고 성공적으로 설정되면 accept 메서드는 동일한 로컬 포트에 바인딩되고 원격 주소와 원격 포트가 클라이언트의 포트로 설정된 새 Socket 개체를 반환합니다. 서버는 이 새 소켓을 통해 클라이언트와 통신할 수 있으며 원래 ServerSocket 프로그램의 클라이언트 연결 요청을 계속 수신할 수 있습니다. 그러나 프로그램의 수정된 버전은 여러 클라이언트 지원에 제공됩니다.