[Java]네트워킹(Networking) : java.net
1. 네트워킹(Networking)
1.1 클라이언트/서버(client/sever)
서버란?
- 서버 프로그램은 IP가 고정이다.
- 클라이언트에서 연결할 때 연결번호가 필요한데, 이를 PORT라고 한다.
- PORT는 0 ~ 65535의 숫자를 사용한다. (1 ~ 1023은 이용중인 포트)
- (예)
클라이언트 포트 HTTP 80 SMTP 25 FTP 21 TELNET 23 Spring 8080 React 3000 오라클 1521 MS-SQL 1433 머드 4000 음성 20000 화상 30000
서버에서 하는 역할
- 사용자 요청받기
- 요청 처리하기
- 결과값을 사용자에게 전송
서버 종류
- 서버와 클라이언트가 1:1(Peer to Peer)통신
- 서버 하나에 여러 클라이언트가 들어가는 1:다 통신
- 데이터가 동일해야함
- 사용자에 따라 요청을 할 수 있게 만든다.
- 사용자의 요청을 받아서 처리하는 프로그램이 여러개가 존재해야함
- 통신하는 프로그램이 별도로 수행하게 만들어야함(쓰레드)
서버와 클라이언트
-
서버 가동 :
socket()
ServerSocket ss = null;(Socket=발신자정보, IP와 PORT정보 저장되어 있음)
ss= new ServerSocket(번호);실행하면 bind(ip,port) + listen() 도 실행됨 -
IP+PORT의 결합(개통) :
bind() -
대기상태 :
listen() - 접속대기 :
accept()- 접속됐을때만 accept()호출됨 (발신자 IP 생성됨)
- while문 안에 있어도 접속 안되어있으면 루프안돌아감
- 무전기에서 채널 안맞으면 작동 안되듯이, 접속되야만 실행되는 특수한 메소드
- 저장 : 동기화프로그램
- Arraylist : 들어오는대로 저장, 비동기화
- Vector : 동기화
- 통신 :
write(),read()서버와 클라이언트는 교차로 번갈아서 수행됨- 데이터 전송 : write()메소드 활용
- 데이터 수신 : readLine()으로 사용자 요청값을 읽기
일반 서버와 웹서버
- 일반서버(Application) : Socket을 이용(연결기계 => 소프트웨어로 제작)
- 웹서버 : URL을 이용
서버와 쓰레드
- 서버는 접속만 담당하고, 클라이언트는 실제 통신을 담당한다.
- 이때 서버는 클라이언트마다 따로 통신하기 때문에 쓰레드를 이용한다.
1.2 IP주소(IP address)
1.3 InetAddress
1.4 URL(Uniform Resource Location)
1.5 URLConnection
2. 소켓 프로그래밍
- ServerSocket
- 전화기
- 서버 연결할 때 쓰는 것
- Socket
- 클라이언트 연결할 때 쓰는 것
2.1 TCP와 UDP
내부 프로토콜
서버와 클라이언트가 데이터를 주고받는 약속
-
컴퓨터, ip폰 등 한 클라이언트에서 발생한 데이터가 상대방 컴퓨터 혹은 서버로 전달되기 위해서는 표준화 된 어떠한 약속 혹은 절차를 따라야한다. 전기 신호가 그냥 케이블을 타고 상대방 컴퓨터로 전달되는 것이 아니다.
-
보내는 쪽에서는 데이터를 안전하고, 정확하고, 신속하게 규격화 즉 포장하는 방법이 필요하고, 받는 쪽에서는 그 데이터를 안전하고 정확하고 신속하게 해석하는 방법이 필요한 것이다. 그런 기술적 약속을 프로토콜 이라고 한다.
프로토콜 전송 방식
- TCP(연결지향적 프로그램, Transmission Control Protocol)
- 서버가 보낸 응답을 클라이언트가 받았는지 메세지를 보내는 방식
- 속도는 느리지만 손실이 없음(정확)
- UDP(사용자 데이터그램 프로토콜, User Datagram Protocol)
- 서버가 보낸 응답을 클라이언트가 받았는지 확인하지 않고 계속 다음 응답을 보내는 방식
- 속도는 빠르지만 손실이 있음
- 게임프로그램에서 주로 쓰임