当前位置: 首页 > news >正文

JAVA入门——网络编程简介

自己学习时的笔记,可能有点水( 

以后可能还会补充(大概率不会)

一、基本概念

网络编程三要素:

  • IP
    • 设备在网络中的唯一标识
  • 端口号
    • 应用软件在设备中的唯一标识
    • 两个字节表示的整数,0~1023用于知名的网络服务和应用,其他的可以自己使用
    • 注意:一个端口号只能由一个应用程序使用
  • 协议
    • 数据在网络中的传输规则

IP细节

  • IPv4:互联网通信协议第四版,采取32位地址长度,分为四组,每组转成十进制,中间用“点”隔开,注意没有负数
    • 只有四十多亿个,2019年就不够用了,所以出现了IPv6
  • IPv4地址分类形式:
    • 公网地址
    • 私有地址(局域网)
      • 192.168.开头的地址
    • 特殊IP:127.0.0.1,本机IP,localhost
  • IPv6:采取128位地址长度,分成八组
    • 采取冒分十六进制表示法
    • 0位压缩法:如果中间有很多0,可以压缩不写
      • 例:FF01:0:0:0:0:0:0:FF02可以写成FF01::FF02

常用CMD命令

ipconfig:查看本机IP

ping:检查网络是否连通

二、InetAddress类的使用

public class MyInetAddressTest1 {public static void main(String[] args) throws UnknownHostException {//1.确定主机名称的IP地址InetAddress i = InetAddress.getByName("LAPTOP-8614VVAT");//填主机名或IP地址System.out.println(i);System.out.println(i.getHostName());System.out.println(i.getHostAddress());}
}

三、UDP协议

1.发送数据

UDP协议的发送,不管有没有建立连接都会发送,不一定能接收到

步骤:

  • 创建发送端的DatagramSocket对象
  • 数据打包(DatagramPacket)
  • 发送数据
  • 释放资源
import java.io.IOException;
import java.net.*;public class SendMessage {public static void main(String[] args) throws IOException {//1.创建对象//空参:随机使用一个端口进行发送//带参:指定端口号进行绑定DatagramSocket ds = new DatagramSocket();//2.打包数据String str = "114514王俊阳没有牛牛";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");//本机IPint port = 10086;//端口号//3.发送数据ds.send(new DatagramPacket(bytes,bytes.length,address,port));//4.释放资源ds.close();}
}

2.接收数据

步骤:

  • 创建接收端的DatagramSocket对象
  • 接收打包好的数据
  • 解析数据包
  • 释放资源

细节:

  • receive方法是阻塞的,会等待消息发送过来
  • 注意先启动接收端,再启动发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class ReceiveMessage {public static void main(String[] args) throws IOException {//1.创建接收端口//注意:一定要绑定端口,并且绑定的端口要与发送端口保持一致DatagramSocket ds = new DatagramSocket(10086);//2.接收byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);ds.receive(dp);//3.解析数据包byte[] data = dp.getData();//获取发来的数据int len = dp.getLength();//发来多少数据int port = dp.getPort();//端口号InetAddress address = dp.getAddress();//IP地址System.out.println("接收到数据" + new String(data,0,len));System.out.println("该数据从" + address + "这台电脑中的" + port + "端口发出的");ds.close();}
}

3.UDP协议的三种通信方式

1.单播

  • 1对1发送与接收数据

2.组播

  • 给一组电脑发送信息
  • 组播地址:224.0.0.0~239.255.255.255
    • 其中224.0.0.0~224.0.0.255是预留地址,可以我们自己用
  • 创建对象时要创建MulticastSocket对象,指定InetAddress时要指定组播的地址

3.广播

  • 给局域网中所有电脑发送数据    
    • 地址:255.255.255.255

四、TCP协议

  • 一种可靠的网络协议,他会在通信的两端分别建立一个Socket对象
  • 通信前要保证连接已经建立
  • 通过Socket产生IO流来进行网络通讯

客户端步骤:

  • 创建Socket对象与指定服务端连接
    • Socket(String host,int port)
  • 获取输出流,写数据
    • OutputStream getOutputStream()
  • 释放资源
    • void clear()

服务器步骤:

  • 创建服务器端的Socket对象
    • ServerSocket(int port)
  • 监听客户端连接,返回一个Socket对象
    • Socket accept()
  • 从Socket对象中获取输入流,读数据,并把数据显示在控制台
    • InputStream getInputStream()
  • 释放资源
    • void clear()

三次握手和四次挥手:

  • 三次握手:为了保证连接的确立
    • 客户端向服务端发出连接请求,等待服务器确认
    • 服务器向客户端返回一个响应,告诉客户端收到了请求
    • 客户端向服务端再次发出确认信息,建立连接
  • 四次挥手:确保连接断开且数据处理完毕
    • 客户端向服务端发出取消链接请求
    • 服务端返回一个响应,表示受到请求
      • 此时不会断开,会将流中最后的数据处理完毕
    • 服务器向客户端发出确认取消的信息
    • 客户端再次发出确认信息,链接取消

相关文章:

JAVA入门——网络编程简介

自己学习时的笔记,可能有点水( 以后可能还会补充(大概率不会) 一、基本概念 网络编程三要素: IP 设备在网络中的唯一标识 端口号 应用软件在设备中的唯一标识两个字节表示的整数,0~1023用于知名的网络…...

Ubuntu 合上屏幕 不待机 设置

有时候需要Ubuntu的机器合上屏幕的时候也能正常工作,而不是处于待机状态。 需要进行配置文件的设置,并重启即可。 1. 修改配置文件 /etc/systemd/logind.conf sudo vi /etc/systemd/logind.conf 然后输入i,进入插入状态,修改如…...

捣鼓180天,我写了一个相册小程序

🙋为什么要做土著相册这样一个产品? ➡️在高压工作之余,我喜欢浏览B站上的熊猫幼崽视频来放松心情。有天在家族群里看到了大嫂分享的侄女卖萌照片,同样感到非常解压。于是开始翻阅过去的聊天记录,却发现部分图片和视…...

短分享-Flink图构建

一、背景 通过简单的书写map、union、keyby等代码,Flink便能构建起一个庞大的分布式计算任务,Flink如何实现的这个酷炫功能呢?我们本次分享Flink做的第一步,将代码解析构建成图 源码基于Flink 2.10,书籍参考《Flink核…...

【监督学习】支持向量机步骤及matlab实现

支持向量机 (四)支持向量机1.算法步骤2. MATLAB 实现参考资料 (四)支持向量机 支持向量机(Support Vector Machine, SVM)是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的…...

机器学习-随机森林解析

目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 ​**(1) 减少过拟合** ​**(2) 高效并行化** ​**(3) 特征重要性评估** ​**(4) 耐抗噪声** 四. 随机森林的优缺点 ​优点 ​缺点 五.…...

Javaweb后端spring事务管理 事务四大特性ACID

2步操作,只能同时成功,同时失败,要放在一个事务中,最后提交事务或者回滚事务 事务控制 事务管理进阶 事务的注解 这是所有异常都会回滚 事务注解 事务的传播行为 四大特性...

在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案

问题背景 在实际业务中,我们常会遇到数据冗余问题。例如,一个公司表(sys_company)中存在多条相同公司名的记录,但只有一条有效(del_flag0),其余需要删除。删除前需将关联表&#xf…...

【无标题】四色拓扑模型与宇宙历史重构的猜想框架

### 四色拓扑模型与宇宙历史重构的猜想框架 --- #### **一、理论基础:四色拓扑与时空全息原理的融合** 1. **宇宙背景信息的拓扑编码** - **大尺度结构网络**:将星系团映射为四色顶点,纤维状暗物质结构作为边,构建宇宙尺度…...

[特殊字符] Django 常用命令

🚀 Django 常用命令大全:从开发到部署 Django 提供了许多实用的命令,可以用于 数据库管理、调试、测试、用户管理、运行服务器、部署 等。 本教程将详细介绍 Django 开发中最常用的命令,并提供 示例,帮助你更高…...

mysql中如何保证没有幻读发生

在 MySQL 中,幻读(Phantom Read)是指在一个事务中,两次相同的查询返回了不同的结果集,通常是由于其他事务插入或删除了符合查询条件的数据。为了保证没有幻读,MySQL 主要通过 事务隔离级别 和 锁机制 来实现…...

Golang实践录:go发布版本信息收集

go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文,为方便阅读,使用工具翻译成中文,重要特性参考其它资料补充/修改。由于发布版本内容较多&#xf…...

字节跳动AI原生编程工具Trae和百度“三大开发神器”AgentBuilder、AppBuilder、ModelBuilder的区别是?

字节跳动AI编程工具Trae与百度"三大开发神器"(AgentBuilder、AppBuilder、ModelBuilder)在定位、功能架构和技术路线上存在显著差异,具体区别如下: 一、核心定位差异 Trae:AI原生集成开发环境(AI…...

【UCB CS 61B SP24】Lecture 21: Data Structures 5: Priority Queues and Heaps 学习笔记

本文介绍了优先队列与堆,分析了最小堆的插入与删除过程,并用 Java 实现了一个通用类型的最小堆。 1. 优先队列 1.1 介绍 优先队列是一种抽象数据类型,其元素按照优先级顺序被处理。不同于普通队列的先进先出(FIFO)&…...

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…...

QEMU源码全解析 —— 块设备虚拟化(1)

本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 详解全虚拟半虚拟及硬件辅助虚拟化技术-百度开发者中心 特此致谢! 序言 本专栏之前的系列文章,讲了很多QEMU/KVM相关知识,其中一部分内容是设备的虚拟…...

IDEA中Git版本回退终极指南:Reset与Revert双方案详解

目录 前言一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提交历史1.2、选择目标版本1.3、选择回退模式1.3.1、Soft(推荐)1.3.2、Mixed1.3.3、Hard(慎用)1.3.…...

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 目录 Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 一、简单介绍 二、简单介绍 flutter_screenutil 三、安装 carousel_slider 四、简单案例实现 五、关键代码 六、补…...

实验一:在Windows 10/11下配置和管理TCP/IP

目录 1.【实训目标】 2.【实训环境】 3.【实训内容】 4.【实训步骤】 1.【实训目标】 1.了解网络基本配置中包含的协议、服务、客户端。 2.了解Windows支持的网络协议及参数设置方法。 3.掌握TCP/IP协议的配置。 2.【实训环境】 硬件环境:每人一台计算机&a…...

基于hive的电信离线用户的行为分析系统

标题:基于hive的电信离线用户的行为分析系统 内容:1.摘要 随着电信行业的快速发展,用户行为数据呈现出海量、复杂的特点。为了深入了解用户行为模式,提升电信服务质量和精准营销能力,本研究旨在构建基于 Hive 的电信离线用户行为分析系统。通…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...