JAVA入门——网络编程简介

ops/2025/3/6 9:48:32/

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

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

一、基本概念

网络编程三要素:

  • 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类的使用

java">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)
  • 发送数据
  • 释放资源
java">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方法是阻塞的,会等待消息发送过来
  • 注意先启动接收端,再启动发送端
java">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()

三次握手和四次挥手:

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


http://www.ppmy.cn/ops/163567.html

相关文章

基于 Kubernetes 搭建 DevOps 持续集成环境

环境准备 在部署 Kubernetes(K8s)以及相关 DevOps 工具(如 Jenkins、Kuboard、Harbor)时,我们需要确保服务器和软件环境符合要求。 服务器及软件环境 服务器配置:2 核 4G 及以上(推荐至少 2 …

【Vue3】实现一个超过高度后可控制显示隐藏的组件

组件效果图 未达到最大高度 达到设置的最大高度 进行展开 实现代码 组件代码 备注&#xff1a;通过tailwindcss设置的样式&#xff0c;通过element-plus/icons-vue设置的图标&#xff0c;可根据情况进行替换 <template><!-- 限制高度组件 --><div ref"…

smart代理原生住宅IP是如何避免跨境电商店铺被DDoS攻击的?

随着跨境电商的迅猛发展&#xff0c;越来越多的商家开始把业务拓展到国际市场&#xff0c;然而&#xff0c;随之而来的是网络安全问题的威胁&#xff0c;其中最常见的是DDoS攻击。 这种攻击方式会让商家的网站或应用程序停止运作&#xff0c;从而影响销售和声誉。 幸运的是&…

CES Asia 2025增设未来办公教育板块,科技变革再掀高潮

作为亚洲消费电子领域一年一度的行业盛会&#xff0c;CES Asia 2025&#xff08;第七届亚洲消费电子技术贸易展&#xff09;即将盛大启幕。今年展会规模再度升级&#xff0c;预计将吸引超过500家全球展商参展&#xff0c;专业观众人数有望突破10万。除了聚焦人工智能、物联网、…

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务&#xff0c; 智能体自动生成完成任务所需步骤&#xff0c; 执行相应动作&#xff08;例如选择并调用工具&#xff09;&#xff0c; 直到任务完成。 2. 先定义工具&#xff1a;Tools 可以是一个函数或三方 API也…

【AI深度学习基础】Pandas完全指南进阶篇:解锁高效数据处理高阶技能 (含完整代码)

&#x1f4da; Pandas 系列文章导航 入门篇 &#x1f331;进阶篇 &#x1f680;终极篇 &#x1f30c; &#x1f31f; 前言 在入门篇中&#xff0c;我们掌握了 Pandas 的核心数据结构和基础操作。本篇将深入探索 高效数据处理、复杂数据建模、性能调优 等进阶技能&#xff0c;…

Android14 OTA差分包升级报kPayloadTimestampError (51)

由于VF 架构&#xff0c; 所以镜像的打包时间可能存在偏差&#xff0c; 如 boot.img 和 客制化的一些镜像打包 可能会在 vendor 侧进行打包。 而 与system 侧进行merge 时&#xff0c;时间戳比较乱&#xff0c;为了解决这个问题&#xff0c;让时间戳进行统一。 使用adb方式验证…

火语言RPA--删除PDF页

【组件功能】&#xff1a;删除PDF指定页文档 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待删除PDF页的PDF文件完整路径。 删除页码 支持T或# 要删除的页面&#xff0c;多个用逗号分隔&#xff0c;连续删除多页用“-”连接起始结尾&#xff0c;例如&#xff1a;…