네트워크
네트워크 개념
Intranet / Internet의 구분
라우터를 기준으로 안쪽을 intranet, 외부를 Internet이라고 합니다.
라우터는 IP의 대역또한 가지고 있습니다.
PC ---- NIC ---- HUB ---- HUB ---- ROUTER ---- INTERNET ---- (WEB, FTP, DB)Server
LAN UTP │
│
Intranet ←│→ Internet
│
사설 IP │
172.0.0.1 │ 고정 IP 로만 외부와 연결 가능
192.168.0.1
10.0.0.1
127.0.0.1IP and Port의 이해
IP는 도시와 같은 위치 정보에 해당합니다.
Port는 항구를 뜻하는 용어로 실제로 네트워크상으로 접속되는 지점을 말합니다.
사용 가능한 포트 : 0 ~ 65535
사용할 수 없는 포트 21 : FTP 23 : Telnet 25 : SMTP 80 : HTTP, IIS등 웹서버 1433 : MS-SQL 기본 포트 3306 : MySQL 기본 포트 1521 : Oracle 기본 포트 8080 : Apache, 기타 웹 서버
1500번 이하는 시스템이 사용하는 포트가 많음으로 1500 이상되는 포트를 사용하기바람
네트워크를 지원하는 java.net 패키지의 기본클래스
URL 클래스
URL 클래스는 웹상에 존재하는 자원에 접근하거나 네트웍상의 유일한 주소를 나타내기 위한 방법을 제공합니다. 또한 위치정보를 관리하기 위한 클래스 입니다. 해당 위치에 스트림을 개설할 수 있습니다.(openStream() 이용)
URL 객체 생성후 스트림 개설
URL객체를 생성할때는 MalformedURLException 에러처리를 해야 합니다.
URL의 구조
프로토콜://호스트이름: 포트/호스트상의 경로명/파일 의 형태를 지니고 있습니다.
네트워크 연습
URL 클래스를 이용하는 방법
URLMain.java
URLMain.java
URLConnection 클래스
URL을 목표지점으로 하는 네트웍 연결을 위한 작업을 수행합니다.
URL객체의 스트림 생성과 URLConnection 객체의 스트림 생성
URL 객체
URLConnection 객체
URLConnection을 이용한 입력 스트림 개설
URLConnectionMain.java
URLConnection.java
url을 이용하여 문서 내용을 가져오기
URLConnectionMain.java
url이용 파일 다운로드
URLFileCopy.java
간단 하게 서버접속하기
서버 생성
Server.java - 서버 생성
클라이언트 생성
Client.java - 클라이언트 생성
소켓을이용한 데이터 전송
서버
소켓을 이용해 데이터를 전달받을 서버를 생성.
server1.java
클라이언트
Clinet1.java
소켓을 이용해 데이터를 전달할 클라이언트를 생성.
정리
컴퓨터-socket-stream-network
ServerSocket 클래스는 외부로 들어오는 접속 정보의 통로 역할을 하는 구멍으로서 정보를 제공하는 역할을 하므로 서버 1개, 클라이언트 여럿을 상대하게 됨
c에서는 소켓을 만들 때 IP 주소가 필요없지만, java 에서는 IP주소가 클래스 내에 포함되어 있어 서버소켓 생성시 ip주소를 입력하는 형태로 되어 있음, 이주소 함께 포트번호를 내부적으로 바인딩시켜줌
서버에는 서버소켓은 들어오는 역할을 하는 통로이고 클라이언트는 다수를 취급하므로 클라이언트와 통신하는 소켓은 별도로 만들어줘야함.
클라이언트가 서버에 접속해오면 별도의 소켓을 하나 더 생성하며 이를 일반적인 Socket클래스에서 다루게 됨
소켓을 통해 스트림이 오고가며 소켓에 스트림을 연결해줘야 합니다.
스트림 생성은 socket.getInputStream()을 InputStream 인스턴스를 생성하게 되며 추가적으로 데이터를 읽기 쉽도록 DataInputStream 추가적으로 연결하게 됩니다.(들어오는 데이터)
반대로 출력스트림은 socket.getOutputStream()을 이용해 OutputStream 인스턴스를 생성하게 됩니다.(외부로 나가는 데이터)
서버에 접속하기 위해서 클라이언트는 인터넷 정보를 수집하게 되는데 이때 이용하는 클래스가 InetAddress이다. 이클래스는 인터넷 주소 정보를 얻어오거나 저장해 두는 역할을 하는 클래스이다.
InetAddress Class
IP주소와 관련된 여러 정보 제공
InetAddress의 객체를 생성하기 위해 스태틱의 getByName()메소들 이용합니다.
AddressTest.java
Socket, ServerSocket
ServerSocket: 클라이언트보다 먼저 실행되어 클라이언트의 접속 요청을 기다리며, 클라이언트가 접속하면 양방향 통신을 할 수 있는 Socket 객체를 생성합니다.
Socket: 다른 Socket과 데이터를 송수신 합니다.
Network 프로그램의 운영순서
Server: ServerSocket 생성
Server: 포트감시 시작, Client의 접속을 기다림
Client: Socket 생성시에 인자 값으로 서버의 IP, PORT를 지정, 서버에 접속 요구
Server: Client의 요구를 받아 Socket 객체 생성
Server: 생성된 Socket 객체를 이용해 Client에게 데이터를 보냄
Client: Socket객체로 데이터를 받고 필요한 데이터를 다시 서버로 전송함
Socket의 처리방식.
ServerSocket에 의해 Client의 접속요청후 생성된 Socket PORT 나, Clinet쪽 Socket PORT는 무작위로 발생 합니다.
다음설명은 아래와 같습니다.
Queue(FIFO:First In First Out, 선입선출)
기본적인 소켓통신 연습
네트웍으로 출력하는 경우 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); writer.write("왕눈이 서버에 접속 하신것을 환영 합니다."); writer.flush();
네트웍에서 읽어오는 경우 BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = reader.readLine();
서버측 소켓 생성
TestServer.java(서버측)
클라이언트 측 소켓 생성
TestClient.java(클라이언트 측)
실행하기
포트보안 문제시 예외 처리
**[시작 -- 설정 -- 제어판 -- Windows 방화벽]**에서 2022 포트를 **[예외]**로 등록합니다.
서버 실행
Client 실행
Last updated