4月16号总结

news2025/3/11 9:12:13

java学习

网络编程

1.网络分层

网络分层是将网络通信划分为不同的逻辑层次,每一层负责特定的功能,从而实现网络通信的模块化和标准化。常用的网络分层模型包括OSI(开放系统互联)模型和TCP/IP模型。

特点和作用:

  • 分层模型使得网络协议更易于设计、实现和维护,每一层都有明确定义的功能和接口。
  • 分层模型提供了标准化的接口和协议,不同厂商和组织之间可以基于共同的标准进行通信和互操作。
  • 每一层的功能清晰划分,有助于故障排除和性能优化。

总的来说,网络分层模型是一种组织网络通信的方式,将复杂的通信过程分解为多个层次,使得网络设计和管理更加简单和可靠。

2.网络编程三要素

2.1 IP地址

IP地址相当于每台计算机的标识符,也就是“名字”,如果想要实现计算机的网络通信,那么IP地址就是帮助你找到你想要通信的计算机的方式。

IP地址分类为IP4,和IP6。

IP4又四个字节组成,32位,大约可以表示42亿台计算机,但是随着电子产品的增多,IP4分配的地址明显是不够的,那么我们就需要一种能分配更多地址的方式,那就是IP6。

IP6有16字节,128位,号称可以为地球的每一粒沙子命名。

如果想要知道自己电脑的IP地址,可以Win+R打开黑窗口,输入ipconfig就可以查看自己电脑的IP4和IP6地址(一些新的设备没有IP4地址)。

2.2 端口

如果说IP地址是计算机的标识,那么端口号就是应用程序的标识,没有端口号,两台计算机之间也不能实现网络通信。

端口分类:

公认端口:0~1023。被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23)
注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。(我们后面开发的程序可以使用这个范围的端口号)
动态/私有端口:49152~65535。
端口号与IP地址的组合得出一个网络套接字:Socket。

2.3 协议

网络通信协议是一组规则和约定,用于在计算机网络中进行通信和数据交换。这些协议定义了数据如何在网络中传输、路由和处理。常见的网络通信协议包括:

  1. TCP(传输控制协议):提供可靠的、面向连接的通信服务,确保数据的顺序传输和不丢失。常用于需要可靠数据传输的应用,如网页浏览、文件传输等。

  2. UDP(用户数据报协议):提供无连接的通信服务,数据传输不可靠,不保证数据的顺序和完整性。常用于实时应用,如音视频传输、在线游戏等。

  3. IP(互联网协议):定义了计算机在网络上的唯一标识(IP地址),以及数据包的格式和路由规则。IPv4和IPv6是目前广泛使用的两个版本。

  4. HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本文档,是万维网的核心协议。通过HTTP,用户可以访问网页、发送和接收电子邮件等。

  5. HTTPS(超文本传输安全协议):是HTTP的安全版本,通过SSL/TLS加密协议保护数据传输的安全性和完整性。

  6. FTP(文件传输协议):用于在网络上传输文件,支持文件上传、下载和管理。

  7. SMTP(简单邮件传输协议):用于在网络上传输电子邮件,定义了电子邮件的格式和传输规则。

  8. POP3(邮局协议第3版)IMAP(互联网消息访问协议):用于接收和管理电子邮件的协议,POP3将邮件下载到本地客户端,而IMAP在服务器上管理邮件,客户端只是远程访问邮件。

  9. DNS(域名系统):将域名映射到IP地址的分布式数据库系统,用于解析域名和进行网络寻址。

  10. ARP(地址解析协议):将IP地址解析为物理地址(MAC地址)的协议,用于在局域网中进行通信。

这些网络通信协议共同构成了计算机网络的基础,实现了各种应用和服务之间的通信和交互。

这里为我们着重讲UDP通信TCP通信

3.UDP

从上面图片我们可以看到,使用UDP通信时,不需要与向接收的一方提前建立联系,直接发送信息,信息是否传送到了,不能得知,如果接收信息的一方没在线,发送信息的一方仍然可以发送信息,所以信息是否安全发送不能保证,但是没有了事先的建立联系,通信效率也提高了不少。

实现UDP通信,主要使用到下面方法。

下面我们用代码实现一下。

用户端:

public class Client {
    public static void main(String[] args) {
        //1、创建客户端,发消息的人
        try {
            DatagramSocket socket =new DatagramSocket();
            //2、创建包含信息的包
            Scanner scan=new Scanner(System.in);

            while (true) {

                String msg=scan.nextLine();//输入字符串
                byte[] bytes=msg.getBytes();//转换成字节数组
                if("exit".equals(msg))//退出判断
                {
                    socket.close();
                    break;
                }
                //将信息包装
                DatagramPacket packet=new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);
                //发送信息包
                socket.send(packet);
            }
        } catch (Exception e) {//捕获异常
            throw new RuntimeException(e);
        }
    }
}

服务端:

public class Server {
    public static void main(String[] args) {

        try {
            //1。创建服务端对象
            DatagramSocket socket =new DatagramSocket(6666);//指定端口号

            //2,创建一个数据包对象,用于接受数据
            byte[] buffer =new byte[1024*64];
            DatagramPacket packet =new DatagramPacket(buffer,buffer.length);
            while (true) {
                //接收信息包
                socket.receive(packet);
                int len=packet.getLength();
                String s1=new String(buffer,0,len);
                System.out.println(s1);//打印信息
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

4.TCP

发送信息:

接收信息:

下面我们用多线程实现一个服务端连接多个用户端,并且可以实现多发多收。

服务端:

package com.lenrn.tcp;

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Server {
    public static void main(String[] args) throws Exception {
        //1.实例化一个serversocket对象
        ServerSocket serverSocket=new ServerSocket(6886);
        //2.等待客户端连接,程序暂停,等待客户端的连接请求
        System.out.println("服务端启动");
        while (true) {
            //多次与新用户连接
            Socket socket= serverSocket.accept();

            System.out.println("已经与"+socket.getRemoteSocketAddress()+"建立连接");
            //子线程
            new ServerReadThread(socket).start();
        }

    }
}

class ServerReadThread extends Thread{
    private Socket socket;
    public ServerReadThread(Socket socket)
    {
        this.socket=socket;
    }
    @Override
    public void run() {
        try {

            //3.从socket对象中得到一个字节输入流、
            InputStream is = socket.getInputStream();
            //4.将低级的字节输入流包装成数据输入流
            DataInputStream dis=new DataInputStream(is);
            while (true)
            {
                String rs= dis.readUTF();
                System.out.println(rs);
            }
        } catch (Exception e) {
            System.out.println(socket.getRemoteSocketAddress()+"下线了");
        }
    }
}

用户端:

用户端多开需要勾选选项。

勾选应用即可。

package com.lenrn.tcp;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {

        //1.创建一个Socket对象,同时请求连接服务端
        Socket socket=new Socket("127.0.0.1",6886);

        //2.从socket管道中得到一个字节输出流

        OutputStream os=socket.getOutputStream();
        //3.将低级的字节输出流包装成数据输出流
        DataOutputStream dos=new DataOutputStream(os);
        //4.写数据出去
        Scanner scan=new Scanner(System.in);
        while (true) {
            String msg = socket.getRemoteSocketAddress().toString();
            msg+=": ";
            String k=scan.nextLine();
            msg+=k;
            if("exit".equals(k))
            {
                System.out.println("退出成功");
                dos.close();
                socket.close();
                break;
            }
            dos.writeUTF(msg);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1600343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络的七层模型

序 OSl(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层: OSI参考模型中最接近用…

MathType安装导致的Word粘贴操作出现运行时错误‘53’:文件未找到:MathPage.WLL

MathType安装导致的Word粘贴操作出现运行时错误‘53’:文件未找到:MathPage.WLL 解决方案 1、确定自己电脑的位数; 2、右击MathType桌面图标,点击“打开文件所在位置”,然后找到MathPage.WLL ,复制一份进行…

ES源码二:集群启动过程

命令行参数解析 Elasticsearch:在main里面创建了Elasticsearch实例,然后调用了main方法,这个main方法最终会调用到父类Command的main方法 这里做了几件事: 注册一个 ShutdownHook,其作用就是在系统关闭的时候捕获IO…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

基于栈求解迷宫的单条路径和所有路径

数据结构与算法课的一个实验,记录一下。 单纯想要了解利用栈求解迷宫的算法可以直接跳转到相应的小标题。 完整代码链接code_2024/mazeLab LeePlace_OUC/code - 码云 - 开源中国 (gitee.com) 文章目录 要求栈的实现MazeType类型的组织迷宫的初始化和销毁打印路径…

死磕GMSSL通信-java/Netty系列(二)

死磕GMSSL通信-java/Netty系列(二) 在上一篇文章中,我们探讨了如何利用C/C++实现国密通信。而本文将聚焦于Java环境下,特别是基于Netty框架,如何实现与国密系统的安全通信。为了确保新项目遵循最新的国密标准,我们将优先推荐使用GB/T 38636-2020(TLCP)协议。对于Java开…

python 如何使用windows系统自带的定时功能运行脚本

亲测此定时可以在电脑重启后,仍会自动运行 1.搜索栏搜索‘任务’,打开任务计划程序,点击创建任务 2.写一下任务名称和描述 3.选择触发器,点新建,可以创建定时计划 4.默认只有一次,每天,每月&am…

BackTrader 中文文档(二十七)

原文:www.backtrader.com/ 数据 - 多个时间框架 原文:www.backtrader.com/blog/posts/2015-08-24-data-multitimeframe/data-multitimeframe/ 有时,使用不同的时间框架进行投资决策: 周线用于评估趋势 每日执行进入 或者 5 分钟…

解决 MSYS2 Qt 6.7 默认 stylesheet 在 windows 11 下的显示故障

项目场景: MSYS2 升级到 Qt6.7.0,发现显示故障,所有Qt6程序以及 QtCreator的SpinBox都显示不全,Combox的底色不对。 问题描述 2024年4月1日,pacman升级MSYS2后,Qt6遇到风格错误。如果使用官方的 Qt onlin…

CSS设置内外边距

目录 内边距(paddingj): 前言: 设置内边距: 外边距(margin): 前言: 设置外边距: 补充(折叠): 内边距(padding)&#…

【程序分享】bopcalc 程序:一种评估分子动力学模拟中键序参数的高效方法(二)

分享一篇使用一种评估键序参数的高效程序:bopcalc 。 感谢论文的原作者! 主要内容 “ 我们提出了一种新颖、高效的方法来评估键序参数 (BOP)。我们的方法利用球谐函数和 Wigner 符号的特性来减少 BOP 表达式中的项数,并采用归一化关联勒让德…

APP测试基本流程以及APP测试要点梳理,保证您看了不后悔!

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

使用Pandas解决问题:对比两列数据取最大值的五种方法

目录 一、使用max方法 二、使用apply方法结合lambda函数 三、使用np.maximum函数 四、使用clip方法 五、使用where方法结合条件赋值 总结: 在数据处理和分析中,经常需要比较两个或多个列的值,并取其中的最大值。Pandas库作为Python…

前端大屏项目适配方法

要在F11全屏模式下查看 方法一,rem font-size 动态设置HTML根字体大小 和 body 字体大小(lib_flexible.js) 将设计稿的宽(1920)平均分成 24 等份, 每一份为 80px。HTML字体大小就设置为 80 px&#xff…

OSPF大型实验

OSPF大型实验 实验拓扑图 实验思路 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两…

智慧园区可视对讲广播解决方案

智慧园区可视对讲广播解决方案 目前而言智慧园区管理者主要需要解决的问题是: 1.面对庞大的园区小区规模,能源管理全部依赖人工已经无法实现; 2.节能管理工作难度大,面对问题,没有好的解决方案; 3.面临…

详解电源测试系统自定义报告模板功能:如何轻松实现数据导出

在NSAT-8000电源测试系统内,数据一般分为三级架构:原始数据、数据报告和数据分析。数据报告可以直接展示出电源模块的各项测试数据和测试结果,帮助用户评估电源性能,为电源的优化提升提供数据支持。 系统的记录报告板块展示着历史…

油价年内第五涨,92汽油正式进入8元时代

今天是2024年4月16日,最新消息!据国家发改委网站16日消息,根据近期国际市场油价变化情况,按照现行成品油价格形成机制,自2024年4月16日24时起,也就是今晚过完的零点开始,国内汽、柴油价格&#…

计算机网络:MAC地址 IP地址 ARP协议

计算机网络:MAC地址 & IP地址 & ARP协议 MAC地址IP地址ARP协议 MAC地址 如果两台主机通过一条链路通信,它们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,使用点对点信道的数据链路层不需要使…

FR107-ASEMI快恢复二极管FR107

编辑:ll FR107-ASEMI快恢复二极管FR107 型号:FR107 品牌:ASEMI 封装:DO-41 最大平均正向电流(IF):1A 最大循环峰值反向电压(VRRM):1000V 最大正向电压…