Java基础 Day26

news2025/6/3 20:50:08

一、网络编程简介

1、概念

网络编程指在网络通信协议下,不同计算机上运行的程序,进行数据传输

2、软件架构

(1)CS架构(客户端和服务端)

在用户本地有一个客户端程序,在远程有一个服务器端程序

(2)BS架构(浏览器和服务端)

只需要浏览器,用户通过不同的网址,客户访问不同的服务器端程序

微信小程序属于BS架构

二、网络编程三要素

1、IP

(1)简介

Internet Protocol,是互联网协议地址,也称IP地址

上网设备在网络中的地址,是唯一的

是设备在网络中的唯一标识

有 IPv4 和 IPv6

域名通过 DNS 服务器解析为 IP

(2)IPv4 的地址分类形式

公网地址(万维网使用) 和私有地址(局域网使用)

192.168. 开头的就是私有地址,范围即为192.168.0.0~192.168.255.255

专门为组织机构内部使用,以此节省IP

(3)特殊 IP 地址

127.0.0.1,也可以是localhost,是回送地址,也称本地回环地址,也称本机IP,永远只会寻找当前所在本机

(4)常用CMD命令

ipconfig:查看本机IP地址

ping:检查网络是否连通

(5)INetAddress 类

static InetAddress getByName​(String host)

确定主机名称的IP地址

主机名称可以是机器名称,也可以是IP地址

String getHostName​()

获取此 IP 地址的主机名

String getHostAddress​()

返回文本显示中的 IP 地址字符串

2、端口

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

端口号:由两个字节表示的整数,取值范围:0~65535

其中0~1023之间的端口号用于一些知名的网络服务或者应用

我们自己使用1024及以上的端口号即可

注意:一个端口号只能被一个应用程序使用

3、协议

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

常见的协议有UDP、TCP、http、https、ftp等

三、UDP 协议

1、特点

UDP是面向无连接通信协议(没有接收端也能发送)

速度快,有大小限制(一次最多发送64K),数据不安全,易丢失数据

2、收发数据步骤及示例

public class Send {
    public static void main(String[] args) throws Exception {
        // 1、创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket(8888);
        // 如果不指定端口,则随机指定一个
        // 2、创建DatagramPacket对象
        String message = "Hello World!";
        byte[] content = message.getBytes();
        DatagramPacket packet = new DatagramPacket(
                content,
                content.length,
                InetAddress.getByName("127.0.0.1"),
                9999
        );
        // 3、发送信息
        socket.send(packet);
        // 4、释放资源
        socket.close();
    }
}

public class Receive {
    public static void main(String[] args) throws Exception {
        // 1、创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket(9999);
        // 2、创建DatagramPacket对象
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        // 3、接收数据
        socket.receive(packet);
        // 注意:receive方法会阻塞,直到接收到信息后才会往下执行
        // 接收到的数据在 packet中
        // 4、解析数据
        byte[] data = packet.getData();
        String msg = new String(data, 0, packet.getLength());
        String ip = packet.getAddress().getHostAddress();
        System.out.println("from: " + ip);
        System.out.println("data: " + msg);
        // 5、释放资源
        socket.close();
    }

四、TCP 协议

1、特点

TCP 协议是面向连接的通信协议(需要服务端响应请求)

速度慢,但没有大小限制,数据安全

2、收发数据步骤及示例

public class Client {
    public static void main(String[] args) throws Exception {
        // 1、创建Socket对象,指定服务端的IP和端口
        Socket socket = new Socket("127.0.0.1", 8888);
        // 2、获取传输数据的流对象
        OutputStream os = socket.getOutputStream();
        InputStream is = socket.getInputStream();
        // 3、收发数据
        os.write("Nice to meet you".getBytes());

        byte[] data = new byte[1024];
        int len = is.read(data);
        String msg = new String(data, 0, len);
        String ip = socket.getInetAddress().getHostAddress();
        System.out.println("from: " + ip);
        System.out.println("data: " + msg);

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

public class Server {
    public static void main(String[] args) throws Exception {
        // 1、创建ServerSocket对象,指定端口
        ServerSocket server = new ServerSocket(8888);
        System.out.println("waiting for client...");
        // 2、相应客户端发送的请求
        Socket socket = server.accept();
        // 3、获取传输数据的流对象
        OutputStream os = socket.getOutputStream();
        InputStream is = socket.getInputStream();
        // 4、收发数据
        byte[] data = new byte[1024];
        int len = is.read(data);
        String msg = new String(data, 0, len);
        String ip = socket.getInetAddress().getHostAddress();
        System.out.println("from: " + ip);
        System.out.println("data: " + msg);

        os.write("Nice to meet you too".getBytes());

        // 5、关流并释放资源
        socket.close();
        server.close();
    }
}

3、细节补充

(1)三次握手

第一次:客户端向服务器发送连接请求(SYN包)并等待服务器确认

第二次:服务器向客户端返回一个响应(SYN包 + ACK包)告诉客户端收到了请求

第三次:客户端向服务器再次发送确认信息(ACK包),连接建立

Tips:第三次握手是为了防⽌失效的连接请求突然传到服务器(如网络延迟的重复SYN包)造成单向连接

(4)四次挥手

第一次:客户端向服务器发送取消连接的请求(FIN包)

第二次:服务器返回一个响应(ACK包)告诉客户端收到了请求

服务器将最后的数据处理完毕

第三次:服务器向客户端发送确认取消连接的消息(FIN包)

第四次:客户端再次发送确认消息(ACK包),连接取消

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

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

相关文章

day1-小白学习JAVA---JDK安装和环境变量配置(mac版)

JDK安装和环境变量配置 我的电脑系统一、下载JDK1、oracle官网下载适合的JDK安装包,选择Mac OS对应的版本。 二、安装三、配置环境变量1、终端输入/usr/libexec/java_home -V查询所在的路径,复制备用2、输入ls -a3、检查文件目录中是否有.bash_profile文…

数据分析实战1(Excel制作报表)

Excel数据链接:【课程4.0】第2章_Excel.zip - 飞书云文档 1、拿到数据第一步 备份数据 ctrlshiftL:筛选 相关快捷键:(alt:自动求和、ctrlshift5:转换为%) 2、环比、同比 环比(本…

本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt

项目视频讲解: 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt_哔哩哔哩_bilibili 运行结果:

LabVIEW 中内存释放相关问题

在LabVIEW 编程领域,内存管理是一个关键且复杂的议题。我们常常关注 LabVIEW 如何将内存释放回操作系统(OS),以及是否有方法确保在特定数据结构(如队列、变体属性、动态数据引用 DVR 等)销毁、删除或清空后…

基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案

在使用 OpenAI、Claude、Gemini 等大语言模型 API 构建对话系统时,开发者普遍面临成本不断上升的挑战。无论是基于检索增强生成(RAG)的应用还是独立的对话系统,这些系统都需要维护对话历史以确保上下文的连贯性,类似于…

Python打卡训练营Day42

DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as tr…

基于微信小程序的scratch学习系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“

欢迎来到一整颗红豆的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由一整颗红豆原创✍️,感谢支持❤️!请尊重原创…

SCSAI平台面向对象建模技术的设计与实现

一、核心设计思想 SCSAI平台的核心目标是通过元建模(Meta-Modeling)技术实现面向对象建模的零编码化。其核心思想为: 自反性设计:定义ObjectClassInfo (OCI)为元类(Meta-Class),所有对象类均为…

pikachu通关教程-CSRF

CSRF(get) 用bp进行抓包 选择action value值的修改 点击test in browser copy然后放在bp代理的浏览器上,会出现一个提交按钮,这时候点击之后信息就被修改了。 CSRF(post) 请求的方式不同,其他都是一样 CSRF Token 存在cookie 首先要先下载一…

智能体觉醒:AI开始自己“动手”了-自主进化开启任务革命时代

1. 智能体:AI从“工具”到“伙伴”的关键跃迁 1.1 什么是智能体? 智能体(Agent)是AI的“进化版”——它不再局限于生成文字或图像,而是能像人类一样“规划任务”“调用工具”甚至“协同合作”。例如,一个…

【C++指南】C++ list容器完全解读(二):list模拟实现,底层架构揭秘

. 💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 文章目录 引言一、链表节点设计:双向链表的基石1.1 节点类的实现 二、list框架与核心成员函…

[神经网络]使用olivettiface数据集进行训练并优化,观察对比loss结果

结合归一化和正则化来优化网络模型结构,观察对比loss结果 搭建的神经网络,使用olivettiface数据集进行训练,结合归一化和正则化来优化网络模型结构,观察对比loss结果 from sklearn.datasets import fetch_olivetti_faces #倒入数…

华院计算出席信创论坛,分享AI教育创新实践并与燧原科技共同推出教育一体机

5月21日,信创论坛于上海漕河泾会议中心举办。本次论坛以“聚力融合,繁荣生态”为主题,话题聚焦工业制造、交通运输、金融、教育、医疗等领域。华院计算技术(上海)股份有限公司(以下简称“华院计算”&#x…

华为OD机试真题——会议接待 /代表团坐车(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《会议…

LabVIEW Val (Sgnl) 属性

在 LabVIEW 事件驱动架构中,Val (Sgnl) 属性(Value (Signaling))是实现编程触发与用户交互行为一致性的关键技术。与普通 Value 属性不同,Val (Sgnl) 在修改控件值的同时强制生成值改变事件,确保程序逻辑与 UI 交互保持…

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

目录 一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇(三&…

DAY 35 超大力王爱学Python

知识点回顾: 三种不同的模型可视化方法:推荐torchinfo打印summary权重分布可视化进度条功能:手动和自动写法,让打印结果更加美观推理的写法:评估模式 作业:调整模型定义时的超参数,对比下效果。…

【数据结构】图的存储(十字链表)

弧节点 tailvex数据域:存储弧尾一端顶点在顺序表中的位置下标;headvex 数据域:存储弧头一端顶点在顺序表中的位置下标;hlink 指针域:指向下一个以当前顶点作为弧头的弧;tlink 指针域:指向下一个…

Redis最佳实践——秒杀系统设计详解

基于Redis的高并发秒杀系统设计(十万级QPS) 一、秒杀系统核心挑战 瞬时流量洪峰:100万 QPS请求冲击库存超卖风险:精准扣减防止超卖系统高可用性:99.99%服务可用性要求数据强一致性:库存/订单/支付状态同步…