개발지식 먹는 하마 님의 블로그
Java - 네트워크 프로그래밍 본문
[ 네트워크 프로그래밍 ]
컴퓨터 네트워크 : 컴퓨터들이 서로 데이터를 주고받을 수 있도록 연결된 조직
네트워크 프로그래밍 : 네트워크를 통해 데이터를 주고 받는 프로그램 작성
< 네트워크 프로토콜 TCP/IP >
네트워크 상의 컴퓨터들이 서로 데이터를 주고 받을 때, 따라야 하는 미리 정해진 약속(규약)
대표적으로 TCP/IP가 있다. (관련 내용은 따로 정리하도록 하겠다.
IP 주소와 호스트 네임
각 컴퓨터는 주소를 가지고 있어야 하고 이 때 IP 주소가 사용된다.
숫자로만 구성된 IP는 불편하기 때문에 호스트 네임을 사용한다.
호스트 이름 -> IP 주소로 변환 -> 해당 웹사이트에 요청 보내기
포트와 소켓
> 포트
컴퓨터는 하나의 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 |