네트워크
네트워크 입출력
네트워크의 기초
- 네트워크 : 여러컴퓨터들을 통신회선으로 연결한 것을 말한다.
- LAN(Local Area Network) : 가정, 회사, 건물 등 특정영역에 존재하는 여러컴퓨터들을 연결한 것을 말한다.
- WAN(Wide Area Network) : LAN들을 연결한 것을 말한다.
- 서버와 클라이언트
- 서버 : 서비스를 제공하는 프로그램을 말한다.
- 클라이언트 : 서비스를 요청하는 프로그램을 말한다.
- IP 주소 : 컴퓨터의 고유 주소로 LAN카드 마다 할당된다.
- IP 주소를 알아야 상호 통신이 가능하다.
- IP 주소를 모르면 DNS서버에 접근하여 IP주소를 검색한다.
- Port 번호 : IP주소 하나로 다양한 서버를 구축가능하다.
- 이 경우 클라이언트가 어떤 서버와 통신을 해야하는 지를 구별 해주는 번호가 port 번호이다.
- 클라이언트의 경우도 서버와 연결하면 port번호가 생기는 이는 운영체제에서 자동으로 할당한다.
IP주소 얻기
- Java에서는 IP주소를 사용하기 위해 java.net패키지의 InetAddress로 표현한다.
InetAddress ia = InetAddress.getLocalHost();
- 도메인을 통해 IP주소를 얻을 수 있다.
InetAddress ia = InetAddress.getByName(String domainName);
InetAddress[] iaArr = InetAddress.getAllByName(String domainName);
- InetAddress 객체에서 IP주소를 얻기 위해서는 getHostAddress() 메서드를 사용한다.
String IP = InetAddress.getHostAddress();
TCP네트워킹
- IP주소로 프로그램들이 통신할 때는 약속된 데이터 전송 규약을 사용한다.
- 이 규약을 전송용 프로토콜 이라 부르며, TCP와 UDP가 있다.
- Transmission Control Protocol은 연결형 프로토콜로 상대방이 연결된 상태에서 데이터를 송수신한다.
- 클라이언트가 연결을 요처하고 서버가 연결을 수락하면 통신 회선이 고정되고 이 회선을 통해 데이터를 송수신한다.
- 고정된 회선을 사용하기 때문에 데이터가 순서대로 전달되며 손실이 발생하지 않는다.
- TCP서버
- TCP서버를 개발 하려면 ServerSocket과 Socket이 필요하다.
import java.net.InetSocketAddress;
import java.net.ServerSocket;// port번호를 직접 바인딩하여 생성
ServerSocket serverSocket = new ServerSocket("Port번호");
// 기본생성 후 port를 바인딩 하여 생성
ServerSocket serverSocket = new ServerSocket();
serverSocket.bind( new InetSocketAddress("Port번호"));
//특정 IP에만 할당하는 방법
ServerSocket serverSocket = new ServerSocket();
serverSocket.bind( new InetSocketAddress("IP주소","Port번호"));
- ServerSocket을 생성하면 client Socket의 연결을 수락하기 전까지 블로킹이 된다.
- accept()을 통해 Sokcet을 연결 할 수 있다.
Socket socket = serverSocket.accept();
- 연결된 클라이언트의 IP주소와 Port번호를 확인하기 위해서는 연결된 소켓 주소를 불러와야한다.
import java.net.InetSocketAddress;
InetSocketAddress isa = (InetSocketAddress) socket.getRemotSocketAddress();
String clientIp = isa.getHostString();
String portNo = isa.getPort();
- 연결이 종료되면 serverSocket을 close 해야한다.
serverSocket.close();
- TCP클라이언트
- 클라이언트가 TCP서버에 접속하려면 Socket에 IP주소와 포트 번호를 입력하면된다.
// IP와 포트번호를 통해 생성
Socket socket = new Socket("IP","Port");
//도메인을 통해 생성
Socket socket = new Socket(InetAddress.getByName("domainName"),50001);
//connect를 통해 접속 후 생성
Socket socket = new Socket();
socket.connect(new InetAddress.getByName("domainName"),50001);
- 연결 요청 시 두가지 예외가 발생 할 수 있다. UnknownHostException/ IOException
- 연결이 종료되면 serverSocket을 close 해야한다.
socket.close();
'개발자 꿈나무의 하루 > 01_Boot Camp' 카테고리의 다른 글
(네이버클라우드 부트캠프) 49~50일차 - 토이프로젝트(오목게임 만들기) (0) | 2024.08.05 |
---|---|
(네이버클라우드 부트캠프) 48일차 - Java프로그래밍 기초(멀티 스레드) (0) | 2024.08.05 |
(네이버클라우드 부트캠프) 45일차 - 실습프로젝트(네트워킹) (0) | 2024.07.30 |
(네이버클라우드 부트캠프) 44일차 - 실습프로젝트(Observer패턴) (0) | 2024.07.30 |
(네이버클라우드 부트캠프) 41일차 - Java프로그래밍 기초(파일 입출력) (0) | 2024.07.24 |