Network
- 2개 이상의 PC간 서로 접속
- LAN : Local Area Network
주요 네트워크 관련 명령어
- ipconfig
- 내 컴퓨터의 IP 주소를 확인하는 명령어
- ipconfig > 좀 더 자세한 정보
- ping
- 서버의 IP정보도 확인하고 통신이 원활한지 파악하기 위해 사용
- nslookup
- 네임서버(도메인주소로 매핑)를 조회하는 명령어
- netstat
- NETwork STATus , 네트워크 상태 정보
- netstat -n > 좀 더 자세한 정보
- TCP 프로토콜
- 인터넷에서 컴퓨터와 컴퓨터가 연결된 상태에서 서로 데이터를 주고 받는 통신 방법
- UDP 프로토콜
- 연결이 끊어진 상태에서도 일방적으로 데이터를 주고 받는 방식
- tracert
- 서비스 경로 추적, 서버까지 가기 위한 중간 경로를 보여줌
- arp
- IP address와 Mac Address 같이 조회
IP and Port의 이해
- IP Address. . . . . : 172.16.203.31
- 접속 위치를 나타내는 프로토콜 , 위치 정보에 해당하며 컴퓨터를 구분하는 용도
- 네트워크로 접속되는 지점.
- 전산에서는 하나의 IP에 할당된 여러개의 네트워크 프로그램을 구분하는 용도
- 하나의 포트는 하나의 프로그램과 매핑(연결)됨
- IP 하나당 사용 가능한 포트 : 0 ~ 65535 (2Byte)
1 |
|
프로토콜(Protocol)
- 서로 다른 컴퓨터 간의 의사소통을 위한 통신 규약
- 운영체제도 다를 수 있고, 모바일 장비와 PC, 다양한 하드웨어와 다양한 운영체제 간에 서로 주고 받으려면 미리 약속을 해야 함
- 컴퓨터끼리 정보를 주고 받을때의 통신방법에 대한 약속
프로토콜의 종류
- TELNET : 텍스트 기반의 원격접속 서비스
- putty.exe
- FTP(File Transfer Protocol) - 파일전송
- 알드라이브 , FileZilla
- TCP(Transmission Protocol)
- UDP(User Datagram Protocol) - 방송국
- SMTP(Simple Mail Transfer Protocol) - 이메일
- POP3(Post Office Protocol) - 이메일
- DHCP(Dynamic Host Control Protocol) - 유동IP
- ARP(Address Resolution Protocol) - IP 주소를 물리적 주소로 변환
- HTTP(Hyper Text Transfer Protocol)
- 웹 서비스. 웹브라우저에서 hyper text 문서를 교환하기 위한 프로토콜
- 인터넷에서 하이퍼텍스트(hyper text) 문서를 교환하기 위하여 사용되는 통신규약.
- 하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다. Server에 저장되어 있는 데이터를 사용자가 요청하면 그때마다 데이터를 보여주기 위해 사용되는 Protocol이다.
- HTTPS(HyperText Transfer Protocol over Secure Socket Layer)
- 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다.
네트워크 관련된 클래스
- HTTP Protocol과 관련된 클래스
- java.net
try~catch문
1 |
|
HTML 문서 내용 가져오기
try~catch문
1 |
|
웹페이지문서 저장하기
try~catch문
1 |
|
Thread 클래스
- 하나의 점유 프로그램이나 하나의 메소드가 CPU 자원을 전부 점유하는 것을 막을 수 있다.
- ex) 채팅 프로그램.
1. 쓰레드를 사용하지 않는 경우.
class
1 |
|
main
t1 이 끝나야 t2,t3가 순서대로 나온다.
1 |
|
2. 쓰레드를 사용하는 경우
- Thread클래스와 인터페이스Runnable 있다.
- Thread클래스를 받으면 단일상속 밖에 안되기 때문에, 보통 인터페이스Runnable이 활용도가 더 높다.
- 인터페이스는 다중상속이 가능하다.
- JVM이 쓰레드 관리자에 등록하고 start()메소드가 run()을 호출한다.
Thread 클래스를 상속받는 경우
class
Thread 클래스를 상속받음
클래스가 클래스 상속받는 경우는 단일 상속만 가능
start() , run() 함수가 있음
오버라이드 해야함. 대신 run() 함수만.
1 |
|
main
CPU의 빈공간을 찾아서 들어간다. 그래서 출력값이 순서대로 나오지 않음
1 |
|
Runnable 인터페이스를 이용한 경우
class
다중상속 가능
1 |
|
main
1 |
|
Ticket 예매 프로그램
- Thread 클래스를 이용한 티켓예매프로그램.
1) Data 클래스 생성
synchronized(동기화) 함수
여러 쓰레드에서 공유데이터를 접근하여 사용하고 있을 때, 한 개의 쓰레드에서 공유데이터를 사용하는 중에 쓰레드의 교체가 일어나서 공유데이터가 온전하게 관리되지 못하는 문제가 발생하는데, OS가 개입하여 문제가 발생하지 않도록 조정하는 기법.
1 |
|
2) Thread 클래스 상속받기
1 |
|
Server/Client
- Server
- 요청을 받고 응답 할 수 있는 시스템
- Web Server : 웹브라우저를 통해 웹서비스를 제공
- 종류 : IIS (MS기반 언어-ASP , 닷넷) , Tomcat (JSP언어 , 무료) , JBoss/Resin (JSP언어 , 유료) , Linux 운영체제 기반 (PHP언어, 무료)
- Database Server
- 대용량 저장 장소
- 관계형 데이터베이스
- 종류 : Oracle DB , MySQL DB , Maria DB , MS-SQL DB , Orient DB , SQLite
- No SQL 데이터베이스
- 종류 : Mongo DB , 카산드라
- Mail Server
- Client
- 요청하는 시스템
Socket
- 네트워크 프로그래밍을 위한 인터페이스
- 물리적 소켓
- UDB 소켓등
- 논리적 소켓
- 서버소켓
- 서비스를 제공하는 소켓
- 클라이언트소켓
- 서비스에 접속하는 소켓
- 서버소켓
- ServerSocket
- 클라이언트보다 먼저 실행되어 클라이언트의 접속 요청을 기다리며, 클라이언트가 접속하면 양방향 통신을 할 수 있는 Socket 객체를 생성한다.
- Socket
- 다른 Socket과 데이터를 송수신 한다.
Network 프로그램의 운영순서
- Server : ServerSocket 생성
- Server : 포트감시 시작, Client의 접속을 기다림
- Client : Socket 생성 시에 인자 값으로 서버의 IP , PORT를 지정, 서버에 접속 요구
- Server : Client의 요구를 받아 Socket 객체 생성
- Server : 생성된 Socket 객체를 이용해 Client에게 데이터를 보냄
- Client : Socket객체로 데이터를 받고 필요한 데이터를 다시 서버로 전송함
소켓(Socket)을 이용한 네트워크 프로그래밍
- 서버는 서비스 제공을 위한 서버소켓을 생성하고 클라이언트의 접속을 기다린다.
- 클라이언트가 서버에 접속한다
- 서버에서 연결을 수락하면 데이터 송수신을 위한 새로운 회선이 생성된다.
1) 서버가 클라이언트측에 메세지 전송
서버구축 (Server)
- ServerSocket
- 클라이언트보다 먼저 실행되어 클라이언트의 접속 요청을 기다리며, 클라이언트가 접속하면 양방향 통신을 할 수 있는 Socket 객체를 생성한다.
- dos창에서 실행할 거라 패키지에 만들지 않았음(명령프롬프트에서 테스트)
- 내가만든 Server1에 접근한다는 것이다.
- port 는 전용문 , 0~65535(2byte)
- Server1 클래스만 사용하는 포트번호를 설정한다 > 2019
- 클라이언트가 접속할때는 2019를 통해 접속해야한다.
이클립스로 하고 run을 하면 cmd에서 한글창에서 깨지니까 따로 메모장에 저장해서 run하자. 이때 경로는 다르게 하고 실행시키기.
1 |
|
클라이언트 구축 (Client)
명령프롬프트에서 실행하기
- javac Client1.java
- java Client1 요청서버IP
- 메인함수가 받음. String[] args
1 |
|
2) 클라이언트가 서버측에 메세지 전송
- 서버가 클라이언트측에 보내는 것과 반대로 하면 됨.
서버 구축
1 |
|
클라이언트 구축
1 |
|
1:1 채팅 프로그램 구축하기
1) Server 구축하기
1 |
|
2) Client 구축하기
1 |
|