TCP 프로 토 콜 과 UDP 프로 토 콜 의 원리 와 차이 점 을 깊이 이해 하 다.
9706 단어 TCP 프로 토 콜UDP 프로 토 콜
우선 IP 주소,포트 번호,통신 프로 토 콜 에 관 한 지식 을 알 아야 합 니 다.
IP 주소
네트워크 에 있 는 컴퓨터 는 IP 주 소 를 사용 하여 유일한 표 지 를 하고 IP 주 소 는 IPv 4 와 IPv 6 두 가지 유형 이 있다.IPv 4 는 10 진법 또는 2 진법 표현 형식 을 사용 하고 10 진법 은 비교적 자주 사용 하 는 표현 형식 이다.예 를 들 어
192.168.1.131
,IPv 6 는 16 진법 표현 형식 을 사용 하여 보통 자주 사용 하지 않 는 다.IP 주소 관련 정 보 를 어떻게 보 는 지:
윈도 시스템 에서 cmd 를 켜 고 명령
ipconfig
을 입력 하고 리 턴 을 누 르 면 볼 수 있 습 니 다.Linux 나 Mac 시스템 에서 단말 기 를 켜 고ifconfig
명령 을 사용 하여 리 턴 을 누 르 면 볼 수 있 습 니 다.포트 번호
포트 번 호 는 컴퓨터 에 있 는 응용 프로그램의 정수 숫자 레이 블 로 서로 다른 응용 프로그램 을 구분 하 는 데 사용 된다.
0 ~ 1024
시스템 에 의 해 사용 되 거나 보 존 된 포트 번호0 ~ 65535
는 효과 적 인 포트 번호 이다.즉,우리 가 일부 프로그램 에 대해 포트 번 호 를 정의 하려 면1024 ~ 65535
범위 내의 정수 숫자 를 선택해 야 한다.예 를 들 어 예전 에 배 운 MySQL 의 포트 번 호 는 3306 이 고 SQLServer 의 포트 번 호 는 1433 이 며 Oracle 의 포트 번 호 는 1521 인 것 을 찾 아 보 았 다.
반드시 이 데이터베이스 에 대응 하 는 포트 번 호 를 깊 은 머 릿 속 에 숨 기 고 나중에 데이터 베 이 스 를 연결 할 때 포트 번 호 를 사용 해 야 한다.
통신 프로 토 콜
쉽게 말 하면 통신 협 의 는 네트워크 통신 의 규칙 으로 TCP 프로 토 콜 과 UDP 프로 토 콜 두 가지 로 나 뉜 다.
첫 번 째:TCP 프로 토 콜
영어 이름:Transmission Control Protocol
전송 제어 프로 토 콜
프로 토 콜 설명:TCP 는 연결 을 위 한 신뢰 할 수 있 고 바이트 흐름 을 바탕 으로 하 는 전송 층 통신 프로 토 콜 입 니 다.
예 를 들 어 전 화 를 하려 면 쌍방 이 모두 연결 해 야 대 화 를 할 수 있다.
특징:효율 이 낮 고 데이터 전송 이 안전 합 니 다.
두 번 째:UDP 프로 토 콜
영문 이름:사용자 데이터 그램 프로 토 콜
데이터 프로 토 콜
프로 토 콜 설명:UDP 는 연결 되 지 않 은 전송 층 을 위 한 통신 프로 토 콜 입 니 다.
예 를 들 어 문자 메 시 지 를 보 낼 때 쌍방 이 연결 할 필요 가 없다.But,데이터 신문 의 크기 는 64k 이내 로 제한 해 야 한다.
특징:효율 이 높 고 데이터 전송 이 안전 하지 않 아 가방 을 잃 어 버 리 기 쉽다.
4.3 요소 관계 도와 네트워크 모델 도
1.네트워크 프로 그래 밍 3 요소 관계 도
주:그림 의 포트 번호,IP 주 소 를 보 여 줍 니 다.진실 이 아 닙 니 다.
2.OSI 참조 모델 과 TCP/IP 참조 모델
5.TCP 프로 그래 밍
TCP 는 바이트 흐름 을 기반 으로 하 는 전송 층 통신 프로 토 콜 이기 때문에 TCP 프로 그래 밍 은 IO 흐름 을 기반 으로 한다.
클 라 이언 트 에 대해 우 리 는
Socket
클래스 를 사용 하여 대상 을 만들어 야 합 니 다.서버 측 에 대해 저 희 는ServerSocket
을 사용 하여 대상 을 만 들 고 대상 호출accept()
방법 으로 클 라 이언 트 의 방문 여 부 를 감청 해 야 합 니 다.클 라 이언 트 와 서버 측 도해:
클 라 이언 트 와 서버 측 실현 절차:
전제:하나의 항목 을 만 들 고 프로젝트 에 두 개의 모듈(model)을 만 듭 니 다.하나의 모듈 은 클 라 이언 트 관련 코드 를 넣 고 하나의 모듈 은 서버 쪽 관련 코드 를 넣 습 니 다.
디 렉 터 리 구 조 는 아래 그림 과 같다.
클 라 이언 트:
1.
Socket
대상 을 만 들 고 서버 엔 드 프로그램의 포트 번호 와 서버 엔 드 호스트 의 IP 주 소 를 지정 합 니 다.2.
Socket
의 대상 호출getOutputStream()
방법 으로 바이트 출력 흐름 대상 을 가 져 옵 니 다.3.바이트 출력 흐름
write(byte[] buf)
을 호출 하거나write(int b)
서버 에 지정 한 데 이 터 를 보 냅 니 다.4.흐름 을 닫 는 것 을 기억 하 세 요.
서버 쪽:
1.
ServerSocket
대상 을 만 들 고 이 프로그램의 포트 번 호 를 지정 합 니 다.포트 번 호 는 클 라 이언 트 가 지정 한 포트 번호 와 같 아야 합 니 다.2.
ServerSocket
대상 의accept()
방법 으로 클 라 이언 트 가 보 낸 요청 을 감청 하고 반환 값 은Socket
대상 이다.3.
Socket
대상 을 호출 하 는getInputStream()
방법 으로 바이트 입력 흐름 대상 을 가 져 옵 니 다.4.바이트 입력 스 트림 대상
read(byte[] buf)
또는read()
방법 으로 데 이 터 를 얻 습 니 다.5.흐름 을 닫 는 것 을 기억 하 세 요.
실례:
클 라 이언 트 가 서버 에 메 시 지 를 보 내 고 서버 에 표 시 됩 니 다.
클 라 이언 트 클래스(클 라 이언 트)
package cn.tkrnet.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
// Socket , IP ,
//localhost IP
Socket client = new Socket("localhost",9000);
// ,
OutputStream os = client.getOutputStream();
os.write("Java is my friend !".getBytes());
System.out.println(" ");
//
os.close();
client.close();
}
}
서버 클래스(서버 쪽)
package cn.tkrnet.server;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("-- --");
// ServerSocket ,
ServerSocket server = new ServerSocket(9000);
// accept(),
Socket socket = server.accept();
//
InputStream is = socket.getInputStream();
//
int b = 0;
while ((b =is.read()) != -1){
System.out.print((char)b);
}
//
is.close();
socket.close();
server.close();
}
}
알림:프로그램 을 실행 할 때 서버 쪽 의 프로그램 코드 를 먼저 실행 하고 클 라 이언 트 의 프로그램 코드 를 실행 해 야 합 니 다.클 라 이언 트 가 서버 에 요청 을 보 내 려 면 서버 쪽 이 열 려 있 는 상태 여야 하기 때 문 입 니 다.서버 클래스(서버 쪽)실행 결과:
--서버 쪽 오픈-
클 라 이언 트 클래스(클 라 이언 트)실행 결과:
메시지 발송 됨
클 라 이언 트 클래스(클 라 이언 트)가 실 행 된 후 서버 클래스(서버 쪽)에서 정 보 를 받 고 실행 결과:
--서버 쪽 이 열 렸 습 니 다--Java is my friend!
실례 분석:
서버 측 이 시 작 된 후 서버 측의
accept()
방법 은 클 라 이언 트 가 서버 에 연 결 될 때 까지 감청 상태 에 있 었 고 서버 측 은 클 라 이언 트 가 보 낸 데 이 터 를 흐름 에서 읽 었 다.솔직히 말씀 드 리 지만,이것 은 매우 무적 이 고 간단 한 단 방향 통신 실례 입 니 다.
6.UDP 프로 그래 밍
UDP 는 데이터 보 를 사용 하여 데이터 전송 을 하 는데 클 라 이언 트 와 서버 의 구분 이 없고 발송 자 와 수신 자 만 있 으 며 둘 중 어느 것 을 먼저 시작 해도 오류 가 발생 하지 않 지만 데이터 패 킷 을 잃 어 버 리 는 현상 이 발생 할 수 있 습 니 다.보 내 는 내용 은 글자 수 제한 이 있 으 며 크기 는 64k 이내 로 제한해 야 합 니 다.
발송 자 와 수신 자 실현 절차:
전제:프로젝트 를 만 들 고 프로젝트 에 두 개의 모듈(model)을 만 듭 니 다.하나의 모듈 은 발송 자 관련 코드 를 넣 고 하나의 모듈 은 수신 자 관련 코드 를 넣 습 니 다.
디 렉 터 리 구 조 는 아래 그림 과 같다.
발송 자:
1.생 성
DatagramSocket
대상 은 프로그램의 포트 번 호 를 지정 할 수도 있 고 지정 하지 않 을 수도 있 습 니 다.2.보 낼 데 이 터 를 준비 합 니 다.
3.
DatagramPacket
대상 을 만 들 고 보 낸 데 이 터 를 포장 할 때 보 내 는 내용,얼마나 보 내 는 지,어디로 보 내 는 지,수신 자의 포트 번호 네 개의 인 자 를 지정 해 야 합 니 다.4.
DatagramSocket
대상 을 호출 하 는send()
방법 으로 데 이 터 를 보 냅 니 다.5.흐름 을 닫 는 것 을 기억 하 세 요.
수신 자:
1.
DatagramSocket
대상 을 만 들 고 수신 자의 포트 번 호 를 지정 합 니 다.이것 은 반드시 지정 해 야 합 니 다.2.발송 자가 보 낸 데 이 터 를 받 기 위해
byte
유형의 배열 을 만 듭 니 다.3.대상 을 만 들 고 데 이 터 를 받 을 준 비 를 합 니 다.
4.
DatagramPacket
대상 을 호출 하 는DatagramSocket
방법 은 데 이 터 를 수신 하 는 데 사용 된다.5.
receive()
류 의 구조 방법 을 사용 하여String
유형의 배열 의 데 이 터 를byte
유형 으로 전환 시 켜 표시 합 니 다.6.흐름 을 끄 세 요.
실례:
발송 자가 정 보 를 보 내 고 수신 자가 정 보 를 받 으 며 표시 합 니 다.
Sender 클래스(발송 자)
package cn.tkrnet.Sender;
import java.io.IOException;
import java.net.*;
public class Sender {
public static void main(String[] args) throws IOException {
// , 7770
DatagramSocket ds = new DatagramSocket(7770); //
System.out.println("--- ---");
// ,
byte[] b = "Java is my friend !".getBytes();
//8800 ,netAddress.getByName("localhost") IP
DatagramPacket dp = new DatagramPacket(b,b.length, InetAddress.getByName("localhost"),7788);
ds.send(dp); //
System.out.println(" ");
//
ds.close();
}
}
Receiver 클래스(수신 자)
package cn.tkrnet.receiver;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Receiver {
public static void main(String[] args) throws IOException {
System.out.println("--- ---");
// ,
// ( 7770, 7788)
DatagramSocket ds = new DatagramSocket(7788);
//
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b,b.length);
//
ds.receive(dp);
System.out.println(new String(b,0,dp.getLength()));
//
ds.close();
}
}
알림:프로그램 을 실행 할 때 발송 자 프로그램 을 먼저 실행 하 든 수신 자 프로그램 을 먼저 실행 하 든 오류 가 발생 하지 않 지만 데이터 패 킷 을 잃 어 버 릴 수 있 습 니 다.일반적으로 우 리 는 수신 자의 프로그램 코드 를 먼저 실행 한 다음 에 발송 자의 프로그램 코드 를 실행 합 니 다.Receiver 클래스(수신 자)실행 결과:
수신 자
Sender 클래스(발송 자)실행 결과:
발송 자-데이터 발송
Sender 클래스(발송 자)가 실 행 된 후 Receiver 클래스(수신 자)가 정 보 를 받 고 실행 결과:
---수신 자---Java is my friend!
실례 분석:
수신 자가 먼저 실행 을 시작 해 야 포트 번호 가 7788 인 프로그램 이 존재 하고 발송 자가 지정 한 포트 번호 7788 로 데 이 터 를 보 낼 수 있 으 며 수신 자가 데 이 터 를 받 을 수 있 습 니 다.
솔직히 이것 도 슈퍼 무적 간단 한 단 방향 통신 사례 다.
7.총화
TCP 프로 토 콜 과 UDP 프로 토 콜 의 원리 와 차이 점 을 깊이 이해 하 는 이 글 은 여기까지 소개 합 니 다.더 많은 TCP 프로 토 콜 과 UDP 프로 토 콜 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!