Java 기반 네트워크 프로그래밍 도입에 대한 자세한 설명

네트워크 프로그래밍에 대한 첫 번째 지식

네트워크 프로그래밍의 세 가지 요소

IP

  • 네트워크에 있는 장치의 주소는 고유한 식별자입니다.

포트 번호

  • 장치에 있는 응용 프로그램의 고유 식별자입니다.

규약

  • 네트워크에서 데이터 전송 규칙 일반적인 프로토콜에는 UDP, TCP, http, https 및 ftp가 포함됩니다.

InetAddress 클래스의 API 인터페이스 사용

여기에 이미지 설명 삽입


네트워크 전송 모델

  • OSI 참조 모델: 세계 인터넷 프로토콜 표준, 글로벌 통신 사양, 단일 모델이 너무 이상적이며 인터넷에서 널리 홍보되지 않았습니다.
  • TCP/IP 참조 모델(또는 TCP/IP 프로토콜): 사실상의 국제 표준입니다.

여기에 이미지 설명 삽입


TCP/IP 4계층 모델

여기에 이미지 설명 삽입


네트워크 전송 프로토콜

컴퓨터 네트워크에서 연결 및 통신 규칙을 네트워크 통신 프로토콜이라고 합니다.

UDP 프로토콜

  • 사용자 데이터그램 프로토콜(User Datagram Protocol) UDP는 연결 없는 통신 프로토콜입니다.
  • 고속,크기 제한한 번에 최대 64K 전송, 데이터는 안전하지 않고 손실되기 쉽습니다.

UDP 프로토콜은 송신측과 수신측이 성공적으로 연결되었는지 여부는 신경 쓰지 않고 전송만 합니다.


TCP 프로토콜

  • 전송 제어 프로토콜 TCP(전송 제어 프로토콜) TCP 프로토콜은 연결 지향 통신 프로토콜입니다.
  • 느린 속도, 크기 제한 없음, 데이터 보안.

TCP 프로토콜은 먼저 발신자와 수신자가 성공적으로 연결되었는지 확인한 다음 전송합니다.


UDP

UDP 통신 프로그램

데이터 보내기

    public static void main(String[] args) throws IOException {
    
    
        //发送数据

        //1.创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket();

        //2.打包数据
        String str = "hello world!";

        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10086;//指定发送到哪个端口

        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);

        //3.发送数据
        ds.send(packet);

        //4.释放资源
        ds.close();
    }

데이터 수신

    public static void main(String[] args) throws IOException {
    
    
        //1.创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket(10086);

        //2.接收数据包
        byte[] bytes = new byte[1024];//定义接收数据的数组
        //定义接收数据的容器
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
        ds.receive(packet);//该方法是阻塞的,程序执行到这一步的时候,会在这里死等等发送端发送消息

        //3.解析数据包
        //就是获取发送时封装的内容
        byte[] data = packet.getData();
        int len = packet.getLength();
        InetAddress address = packet.getAddress();
        int port = packet.getPort();

        System.out.println("接收该数据"+ new String(data,0,len ));
        System.out.println("该数据是从"+address+"这台电脑的"+port+"这个端口发出的");

        //4.关闭资源
        ds.close();
    }

참고: 먼저 데이터를 수신하는 코드를 실행한 다음 데이터를 전송하는 코드를 실행하십시오. 그렇지 않으면 전송된 데이터를 수신할 수 없습니다.


UDP의 3가지 통신 방식

①유니캐스트 일대일 데이터 전송, 발신자와 수신자 간의 일대일 대응


②멀티캐스트 받는 사람이 그룹이고 컴퓨터
그룹에 정보를 보냅니다.
여기에 이미지 설명 삽입


예는 다음과 같습니다

보내는 사람

여기에 이미지 설명 삽입

접수종료

여기에 이미지 설명 삽입


③브로드캐스트 LAN에 있는 모든 컴퓨터에 데이터를 보내고 ,
브로드캐스트 주소는 UDP에 고유합니다.
여기에 이미지 설명 삽입


TCP

TCP 통신 프로토콜

TCP 통신 프로토콜은 신뢰할 수 있는 네트워크 프로토콜로, 통신 양단에서 소켓 개체 통신을 설정해야 합니다.연결이 설정되었는지 확인

네트워크 통신을 위해 Socket을 통해 IO 스트림 생성

다음은 통신을 위해 TCP를 사용하여 아이디어에서 구현한 코드입니다.

고객

    public static void main(String[] args) throws IOException {
    
    
        //TCP协议发送数据

        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务端
        //     如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1",10086);

        //2.从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("hello".getBytes());

        //3.释放资源
        os.close();
        socket.close();
    }

섬기는 사람

    public static void main(String[] args) throws IOException {
    
    
        //TCP协议, 接收数据

        //1.创建对象ServerSocker
        ServerSocket ss = new ServerSocket(10000);

        //2.监听客户端的连接
        Socket socket = ss.accept();

        //3.从连接通道中获取输入流读取数据
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int b;
        while ((b = br.read()) != -1){
    
    
            System.out.print((char) b);
        }

        //4.释放资源
        socket.close();
        ss.close();
    }

TCP 3방향 핸드셰이크

연결이 설정되었는지 확인

여기에 이미지 설명 삽입


TCP의 네 가지 파장

연결이 끊어지고 데이터가 처리되는지 확인하십시오. 이것이 TCP 프로토콜이 안정적인 이유입니다.

여기에 이미지 설명 삽입

서버에서 데이터 처리 여부를 확인하기 위한 것으로, 처리 후 연결 끊김을 확인합니다.

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입


추천

출처blog.csdn.net/giveupgivedown/article/details/129012189