개발지식 먹는 하마 님의 블로그

Java - 네트워크 프로그래밍 본문

Java

Java - 네트워크 프로그래밍

devhippo 2025. 2. 9. 20:25

[ 네트워크 프로그래밍 ]

컴퓨터 네트워크 :  컴퓨터들이 서로 데이터를 주고받을 수 있도록 연결된 조직
네트워크 프로그래밍 : 네트워크를 통해 데이터를 주고 받는 프로그램 작성

< 네트워크 프로토콜 TCP/IP >

네트워크 상의 컴퓨터들이 서로 데이터를 주고 받을 때, 따라야 하는 미리 정해진 약속(규약)
대표적으로 TCP/IP가 있다. (관련 내용은 따로 정리하도록 하겠다.

IP 주소와 호스트 네임

각 컴퓨터는 주소를 가지고 있어야 하고 이 때 IP 주소가 사용된다.
숫자로만 구성된 IP는 불편하기 때문에 호스트 네임을 사용한다.
호스트 이름 -> IP 주소로 변환 -> 해당 웹사이트에 요청 보내기

포트와 소켓

https://choo.oopy.io/6bd233ef-79fe-408c-b993-8cf8351460ec

> 포트

컴퓨터는 하나의 IP 주소를 가지지만, 데이터를 구분하기 위해 여러 개의 포트를 둔다.
모든 서비스는각자 고유한 포트 번호가 할당된다.
따라서 목적에 맞게 포트 번호를 지정해줘야 한다.

호스트 네임 : 포트 번호
IP 주소 : 포트 번호

> 소켓

소켓은 TCP 프로토콜에 따라 두 컴퓨터 사이의 연결을 제공한다.
특정 포트에 연결되어 있다.
위의 그림처럼 포트라는 정해진 문을 열고 들어가 콘센트를 꽂는 것 (소켓 연결) 같은 방식으로 이해했다.

< URL 클래스 >

url은 인터넷 상에 존재하는 자원의 위치를 나타낸다.

프로토콜://호스트 네임(또는 IP 주소):포트/경로

Java에서는 Java.net 패키지의 URL 클래스를 사용해 url을 사용할 수 있다.

URL url = new URL("url");

InputStram in = url.openStream();

openStream 메서드로 url에 연결된 입력 스트림을 얻는다.

 

< 소켓 프로그래밍 >

java.net 패키지의 Socket과 ServerSocket 클래스를 사용한다.

ServerSocket : 클라이언트의 연결 요청을 기다리다가 요청을 받으면 서버 측 소켓을 만들어 연결을 시작한다.
Socket : ServerSocket은 연결이 성공하더라도 새로운 요청 처리를 위해 대기해야 하기 때문에 필요한 클래스

ServerSocket serverSocket = new ServerSocket(포트);

Socket connSocket = serverSocket.accept();

Socket clientSocket = new Socket("호스트 네임", 포트)
ServerSocket  주요 메서드 설명
accept() 클라이언트의 연결 요청을 수락하고, 통신용 Socket 객체를 반환
bind(SocketAddress endpoint) 서버소켓을 특정 주소로 바인딩
getInetAddress() 서버소켓의 로컬 주소를 반환
getRemoteSocketAddress() 소켓이 연결된 원격 엔드포인트의 주소를 반환
getLocalPort() 요청 대기 중인 포트 번호를 반환
getLocalSocketAddress() 소켓이 바인딩된 endpoint의 주소를 반환
isBound() 서버소켓의 바인딩 상태를 반환
isClosed() 서버소켓이 닫혔는지 여부를 반환
setSoTimeout(int timeout)  accept() 메서드의 타임아웃 시간을 설정
close() 서버소켓을 닫음

 

public class TCPServer{
	public class void main(String[] args) throws IOException{
        ServerSocket serverSocket = new ServerSocket(9000);
	    serverSocket.setSoTimeout(60000); //60초 후에 타임아웃 지정
        
        while(true){
            try{
                Socket connSocket = serverSocket.accept();
                connSocket.getRemoteSocketAddress();
                connSocket.close();
            } catch(SocketTimeoutException e) {
                break;
            }
        }
    }
}

 

 

'Java' 카테고리의 다른 글

Java - 제네릭 (Generic)  (0) 2025.02.25
JAVA의 구조  (0) 2025.02.24
Java - 스레드(Thread)  (0) 2025.02.07
Java - 배열과 리스트  (1) 2025.02.06
Java - 인터페이스  (0) 2025.02.05