[ 자바 언어 ] blocking 방식의 TCP 소켓 프로그래밍 서버 및 클라이언트 (1) - Whitmem
[ 자바 언어 ] blocking 방식의 TCP 소켓 프로그래밍 서버 및 클라이언트 (1)
Java Language
2023-06-20 03:19 게시 522e6c1059a7e13b7276

0
0
77
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
자바 언어에서 기본적으로 서버를 열고 수신을 받기 위해서는 ServerSocket 클래스를 활용할 수 있습니다. 이 클래스는 TCP 서버를 열고 그에 대한 수신을 받아 통신을 받을 수 있는 메소드들을 포함하고 있습니다. 반면 Socket클래스를 통해서 서버에 접속할 수 있는데, 여기서는 서버를 열고 접속을 대기하는 방법, 서버에 접속하는 방법에 대해서 간략히 설명 합니다.
서버를 열어보자!
기본적으로 서버를 열기 위해서는 ServerSocket 클래스를 사용합니다. 이 클래스를 사용하여 원하는 포트의 서버를 열 수 있습니다. 기본적으로 사용 가능한 생성자는 다음과 같습니다.
서버 구축
생성자에는 포트가 들어가며, 해당 포트로 TCP 서버가 바로 개방됩니다. 이제 이 TCP 포트로 접속된 클라이언트들에 대해서 수신을 받아야 합니다. 기본적으로 수신 받을 수 있는 클라이언트의 개수는 복수 개가 존재하기 때문에 while문을 통하여 접속자가 생길 때 마다 처리를 진행합니다. 여기 유의 할 것은, server.accept()로 수신을 대기하는데, 어떠한 사용자가 접속할 때 까지 작업을 기다리게 됩니다. 즉 server.accept() 를 수행하지 않는 경우 클라이언트는 서버에 접속할 수 없으며, 다른 작업으로 연기되는 경우 클라이언트의 접속이 미뤄질 수 있습니다.
서버 수신
public static void main(String[] args) { System.out.println("서버의 수신이 대기 중 입니다..."); try { ServerSocket server = new ServerSocket(2233); while (true) { String IP =""; try { Socket client = server.accept(); IP= client.getRemoteSocketAddress().toString(); System.out.println("[IP :" + IP + "] 의 클라이언트가 접속하였습니다."); }catch(Exception ea) { System.out.println("[IP :" + IP + "] 의 클라이언트 연결이 끊어졌습니다."); } } } catch (Exception ea) { System.out.println("전체적인 서버 처리 도중 오류가 발생했습니다.\n" + ea.getLocalizedMessage()); } }
특히 사용자가 접속하면 접속한 클라이언트에 대한 정보는 Socket에 담깁니다. 이 Socket 클래스를 통해서 클라이언트와의 통신을 진행할 수 있으며, 클라이언트 정보를 추가적으로 가져올 수 있습니다.
참고 기본적으로 ServerSocket 및 Socket은 java.net 패키지 안에 있는 클래스를 참조해야 합니다. 참조를 하기 위해서 마우스를 빨간 밑줄에 올린 뒤 Import 를 하거나, 상단에 다음 소스코드 두개를 넣어야 합니다.
import java.net.ServerSocket; import java.net.Socket;
클라이언트로 접속을 해 보자.
이전에 연 서버에 접속을 하기 위해서는 Socket클래스를 사용하면 됩니다. Socket 클래스 생성자의 인자는 다음과 같으며, 다음 클래스의 인스턴스를 생성하는 순간 바로 서버에 접속을 시도합니다. 서버 접속에 실패하는 경우 예외를 발생하며 소스코드 구문을 빠져나갑니다.
클라이언트 접속
전반적인 소스코드
동작 예시
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.