Day46 Java프로그래밍 기초(Network)
네트워크
네트워크 입출력
네트워크의 기초
- 네트워크 : 여러컴퓨터들을 통신회선으로 연결한 것을 말한다.
- 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로 표현한다. ```java InetAddress ia = InetAddress.getLocalHost(); ```
- 도메인을 통해 IP주소를 얻을 수 있다. ```java InetAddress ia = InetAddress.getByName(String domainName); InetAddress[] iaArr = InetAddress.getAllByName(String domainName); ```
- InetAddress 객체에서 IP주소를 얻기 위해서는 getHostAddress() 메서드를 사용한다. ```java String IP = InetAddress.getHostAddress(); ```
TCP네트워킹
- IP주소로 프로그램들이 통신할 때는 약속된 데이터 전송 규약을 사용한다.
- 이 규약을 전송용 프로토콜 이라 부르며, TCP와 UDP가 있다.
- Transmission Control Protocol은 연결형 프로토콜로 상대방이 연결된 상태에서 데이터를 송수신한다.
- 클라이언트가 연결을 요처하고 서버가 연결을 수락하면 통신 회선이 고정되고 이 회선을 통해 데이터를 송수신한다.
- 고정된 회선을 사용하기 때문에 데이터가 순서대로 전달되며 손실이 발생하지 않는다.
- TCP서버
- TCP서버를 개발 하려면 ServerSocket과 Socket이 필요하다. ```java 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을 연결 할 수 있다. ```java Socket socket = serverSocket.accept(); ```
- 연결된 클라이언트의 IP주소와 Port번호를 확인하기 위해서는 연결된 소켓 주소를 불러와야한다. ```java import java.net.InetSocketAddress; InetSocketAddress isa = (InetSocketAddress) socket.getRemotSocketAddress(); String clientIp = isa.getHostString(); String portNo = isa.getPort(); ```
- 연결이 종료되면 serverSocket을 close 해야한다. ```java serverSocket.close(); ```
- TCP클라이언트
- 클라이언트가 TCP서버에 접속하려면 Socket에 IP주소와 포트 번호를 입력하면된다. ```java // 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 해야한다. ```java socket.close(); ```
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.