Java基础 Day26

一、网络编程简介

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.pswp.cn/diannao/85432.shtml

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

相关文章

【Hot 100】45. 跳跃游戏 II

目录 引言跳跃游戏 IIdp解题贪心解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】45. 跳跃游戏 II❣️ 寄语:书到用时方恨少,事非经过不知难! 引言 跳跃…

计算机网络第1章(上):网络组成与三种交换方式全解析

目录 一、计算机网络的概念二、计算机网络的组成和功能2.1 计算机网络的组成2.2 计算机网络的功能 三、电路交换、报文交换、分组交换3.1 电路交换(Circuit Switching)3.2 报文交换(Message Switching)3.3 分组交换(Pa…

[总结]前端性能指标分析、性能监控与分析、Lighthouse性能评分分析

前端性能分析大全 前端性能优化 LightHouse性能评分 性能指标监控分析 浏览器加载资源的全过程性能指标分析 性能指标 在实现性能监控前,先了解Web Vitals涉及的常见的性能指标 Web Vitals 是由 Google 推出的网页用户体验衡量指标体系,旨在帮助开发者量…

Windows商店中的免费扫雷游戏应用

《扫雷》是一款经典的单人益智小游戏,1992年微软发布的Windows 3.1中加入该游戏,从此风靡全世界。游戏目标是通过逻辑推理,在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。 此Windows应用实现了经典扫雷的…

ActiveMQ 可观测性最佳实践

ActiveMQ 介绍 ActiveMQ 是一款高性能、开源的消息中间件,支持多种消息协议(如 JMS、AMQP、MQTT 等),能够实现应用程序之间的异步通信和消息传递。它提供点对点(Queue)和发布/订阅(Topic&#…

【Linux命令】scp远程拷贝

文章目录 1. 基本语法与常用选项2. 使用场景和使用示例本地文件->远程主机远程主机文件->本地远程主机->另一台远程主机 3. 使用注意事项 scp(Secure Copy Protocol)是linux中基于ssh的安全文件传输工具,用于在本地和远程主机之前安…

如何优化 Harmony-Cordova 应用的性能?

以下是针对 ‌Harmony-Cordova 应用性能优化‌的完整方案,结合鸿蒙原生特性和Cordova框架优化策略: ‌⚡一、渲染性能优化‌ ‌减少布局嵌套层级‌ 使用扁平化布局(如 Grid、GridRow)替代多层 Column/Row 嵌套,避免冗…

c++学习之---模版

目录 一、函数模板: 1、基本定义格式: 2、模版函数的优先匹配原则: 二、类模板: 1、基本定义格式: 2、类模版的优先匹配原则(有坑哦): 3、缺省值的设置: 4、ty…

SpringAI(GA):RAG下的ETL快速上手

原文链接:SpringAI(GA):RAG下的ETL快速上手 教程说明 说明:本教程将采用2025年5月20日正式的GA版,给出如下内容 核心功能模块的快速上手教程核心功能模块的源码级解读Spring ai alibaba增强的快速上手教程 源码级解读 版本&a…

用dayjs解析时间戳,我被提了bug

引言 前几天开发中突然接到测试提的一个 Bug,说我的时间组件显示异常。 我很诧异,这里初始化数据是后端返回的,我什么也没改,这bug提给我干啥。我去问后端:“这数据是不是有问题?”。后端答:“…

DataAgent产品经理(数据智能方向)

DataAgent产品经理(数据智能方向) 一、核心岗位职责 AI智能体解决方案设计 面向工业/政务场景构建「数据-模型-交互」闭环,需整合多源异构数据(如传感器数据、业务系统日志)与AI能力(如大模型微调、知识图…

Ubuntu取消开机用户自动登录

注:配置前请先设置登录密码,不同显示管理器配置方法不同,可用命令查看:cat /etc/X11/default-display-manager 一、LightDM 显示管理器,关闭 Ubuntu 系统用户自动登录 查找自动登录配置文件,可以看到类似 a…

使用lighttpd和开发板进行交互

文章目录 🧠 一、Lighttpd 与开发板的交互原理1. 什么是 Lighttpd?2. 与开发板交互的方式? 🧾 二、lighttpd.conf 配置文件讲解⚠️ 注意事项: 📁 三、目录结构说明💡 四、使用 C 编写 CGI 脚本…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布! V2.0.3 作为树表双模型正式版本,主要新增元数据导入导出脚本适配表模型、Spark 生态集成(表模型)、AINode 返回结果新增时间戳,表模型新增部分聚…

车辆检测算法在爆炸事故应急响应中的优化路径

视觉分析赋能车辆管控:以山东应急场景为例 背景:应急场景下的车辆管控痛点 近期山东多起爆炸事故暴露了应急响应中的车辆管理短板:消防车、救护车因违停车辆堵塞通道,违规车辆闯入事故核心区,传统监控系统依赖人工识别…

∑ 1/n 调和级数 是 发散的

为什么 ∑ 1 u \sum \frac{1}{u} ∑u1​(即 ∑ 1 n \sum \frac{1}{n} ∑n1​,通常称为调和级数)是发散的? ✅ 一、首先明确你问的是这个级数: ∑ n 1 ∞ 1 n \sum_{n1}^{\infty} \frac{1}{n} n1∑∞​n1​ 这个级数…

Android第十二次面试-多线程和字符串算法总结

多线程的创建与常见使用方法 ​一、多线程创建方式​ ​1. 继承Thread类​ class MyThread extends Thread {Overridepublic void run() {// 线程执行逻辑System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …

大模型调用数据库表实践:基于自然语言的SQL生成与数据查询系统

# 大模型调用数据库表实践:基于自然语言的SQL生成与数据查询系统 ## 一、背景与目标 在企业数据管理场景中,非技术人员(如业务人员、管理人员)常常需要通过数据库查询获取关键信息,但直接编写SQL语句存在技术门槛。传…

28 C 语言作用域详解:作用域特性(全局、局部、块级)、应用场景、注意事项

1 作用域简介 作用域定义了代码中标识符(如变量、常量、数组、函数等)的可见性与可访问范围,即标识符在程序的哪些位置能够被引用或访问。在 C 语言中,作用域主要分为三类: 全局作用域局部作用域块级作用域 需注意&am…

Tomcat运行比较卡顿进行参数调优

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加参数 1. 初步调整参数(缓解问题) set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代,减少对象过早晋升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…