Java基础之网络编程介绍详尽笔记

news/2024/5/18 13:01:20 标签: 网络, java, udp

目录

  • 初识网络编程
  • 网络传输模型
  • 网络传输协议
  • UDP
    • UDP通信程序
    • UDP的三种通信方式
  • TCP
    • TCP通信协议
    • TCP的三次握手
    • TCP的四次挥手

初识网络编程

网络编程三要素

IP

  • 设备在网络中的地址,是唯一的标识。

端口号

  • 应用程序在设备中唯一的标识。

协议

  • 数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp。

InetAddress类的使用api接口

在这里插入图片描述


网络传输模型

  • OSI参考模型:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广
  • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

在这里插入图片描述


TCP/IP四层模型

在这里插入图片描述


网络传输协议

计算机网络中,连接和通信的规则被称为网络通信协议

UDP协议

  • 用户数据报协议(User Datagram Protocol)UDP是面向无连接通信协议。
  • 速度快,有大小限制一次最多发送64K,数据不安全,易丢失

UDP协议不管发送接收两方是否已经连接成功,它只管发送


TCP协议

  • 传输控制协议TCP(Transmission Control Protocol)TCP协议是面向连接的通信协议。
  • 速度慢,没有大小限制,数据安全。

TCP协议会先确认发送方和接收方二者是否成功连接,再进行发送


UDP

UDP通信程序

发送数据

java">    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();
    }

接收数据

java">    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的三种通信方式

单播
一对一传输数据,发送方和接收方一 一对应


组播
接收方为一组,给一组电脑发送信息
在这里插入图片描述


示例如下

发送端

在这里插入图片描述

接收端

在这里插入图片描述


广播
给局域网中的所有电脑发送数据,广播地址是UDP独有的
在这里插入图片描述


TCP

TCP通信协议

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象通信之前要保证连接已经建立

通过Socket产生IO流来进行网络通信

下面是idea中使用TCP做通讯实现的代码

客户端

java">    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();
    }

服务端

java">    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的三次握手

确保连接建立

在这里插入图片描述


TCP的四次挥手

确保连接断开,且数据处理完毕,这就是为什么TCP协议可靠的原因

在这里插入图片描述

这里是为了确认服务端是否已经将数据处理完毕,处理完才会确认断开连接

在这里插入图片描述
在这里插入图片描述



http://www.niftyadmin.cn/n/70103.html

相关文章

4年经验来面试20K的测试岗,连基础都不会,还不如招应届生。

公司前段时间缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。 看简历很多都是3、4年工作经验&#xf…

【Linux】-- 结合内存与硬盘IO的进程概念

目录 概念 vm_area_struct struct Page 缺页中断 总结 深入理解补充的概念 概念 复习: #问:什么叫进程? 进程 内核相关的数据结构 进程相关的代码和数据 1. 动态运行属性: 进程不仅仅是将磁盘中的程序加载到内存&#xff…

实验十三、阻容耦合共射放大电路的频率响应

一、题目 利用 Multism 从以下几个方面研究图1所示的阻容耦合共射放大电路的频率响应。图1阻容耦合共射放大电路图1\,\,阻容耦合共射放大电路图1阻容耦合共射放大电路(1)设 C1C210μFC_1C_210\,\textrm{μF}C1​C2​10μF,分别测试它们所确定…

5万字市级应急管理大数据信息化云平台建设方案WORD

【版权声明】本资料来源网络,知识分享,仅供个人学习,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间删除!完整资料领取见文末,部分资料内容: 第一章 项目概述 1 项目名称 2 …

如何高雅的使用正则表达式?

正则表达式php中使用方法 PHP中如果需要使用正则表达式判断手机号,那么正则表达式是这样:^[1][3,4,5,6,7,8,9]\\d{9}$ 那么PHP应该这样写: $pattern="^[1][3,4,5,6,7,8,9]\\d{9}$"; preg_match($pattern,$text);//$text是要进行匹配的字符串 结果为0表示不匹配,为…

5.什么是EDA技术

目录什么是EDA技术?概念分析EDA的设计流程什么是EDA技术? 概念 EDA(ELEctrinic design automation)是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理和智能化技术等,进行电子产品自动化设计的一门新技术。 使用…

Android进阶之路 - 自定义数字键盘

在项目开发中自定义控件使用场景相对比较频繁,基本每一个app都会有一些自定义控件,尤其金融产品中涉及的可能更多一些,例如普通app一般使用的都是原生的系统键盘,只需设定初始展示类型为数字键盘、英文键盘基本就可以满足诉求&…

LeetCode 1967. 作为子字符串出现在单词中的字符串数目

给你一个字符串数组 patterns 和一个字符串 word ,统计 patterns 中有多少个字符串是 word 的子字符串。返回字符串数目。 子字符串 是字符串中的一个连续字符序列。 示例 1: 输入:patterns [“a”,“abc”,“bc”,“d”], word “abc”…