6. 소켓(Socket)

한승록·2023년 5월 10일
0

자바 활용

목록 보기
6/9
post-thumbnail
소켓은 네트워크 사이의 연결통로로 사용되며 자바에서는 클래스로 구현되어 서버프로그램을 사용할 수 있도록 해줍니다.
 		// 내 컴퓨터가 접속을 받기 위해서 7777번 포트를 사용하여 접속을 받을 수 있도록 한다
        // 프로그램이 특정 포트를 사용하기 위해서는 운영체제의 허락을 받아야하며, 방화벽에서 열려있어야 한다
        // 실행 - wf.msc - 인바운드 규칙 - 새 규칙 - tcp, 7777, 적당한 설명과 함께 허용으로 규칙 추가
		ServerSocket ss = new ServerSocket(7777);
		
		// 클라이언트가 접속할 때까지 기다린다. 클라이언트의 요청이 오는지 귀를 기울여 듣고 있는 상태(Listen)
		System.out.println("[Server] Listening...");
해당 코드는 서버의 역할을 수행합니다.
ServerSocket은 접속 받기 위해 기입한 포트번호로 통신이 오면 클라이언트와 통신하는 소켓 객체를 생성하도록 합니다.
물론 해당 클래스 사용만으로 해당 포트를 사용할 수 있는 것이 아니라 운영체제의 허락이 필요하며 방화벽을 여는 사전 작업이 필요합니다.
		// (상단의 코드에서 이어집니다.)
        
		// 클라이언트가 내 서버에 접속하면 대상을 가리키는 소켓을 받아올 수 있다
		Socket so  = ss.accept();
		
		// 접속한 클라이언트의 정보를 담고 있는 객체
		InetAddress inet = so.getInetAddress();
		System.out.println("접속한 프로그램의 IP : " + inet);
		
		// 소켓으로부터 넘어오는 정보를 받아들이기 위한  Scanner
		Scanner sc = new Scanner(so.getInputStream());
		
		String data = sc.nextLine();
		System.out.println("전송받은 데이터 : " + data);
		
		sc.close(); // 스케너(데이터 연결통로) 닫기
		so.close(); // 소켓(대상과 접속) 닫기
		ss.close(); // 서버소켓(다른 클라이언트가 접속할 수 있는 연결) 닫기
Socket은 네트워크의 양쪽 끝에서 통신의 입출력을 담당하고 있습니다.
해당 코드에서는 외부에서 서버에 접속 시 대상을 가리키는 소켓을 생성하도록 합니다.


InetAddress는 접속한 클라이언트의 정보를 담고 있습니다.소켓 객체를 생성하도록 합니다.
해당 객체를 통해 메서드를 활용하여 IP주소를 가져오게 됩니다.


위의 과정을 거쳐 불러온 상대방의 정보를 Scanner 클래스를 통해 정보를 받게됩니다.

<※ 결과는 다음과 같습니다.>

profile
개발 학습

0개의 댓글