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

网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取

一、概述

记录时间 [2024-12-19]

前置文章

网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

本文讲述网络编程相关知识——端口,包括端口的定义,分类,以及端口映射等。

同时,文章中通过 Java 编程,实现了 IP 和端口这些网络信息的获取。

通过获取 IP 和端口,同时基于相关的网络协议,我们能实现不同计算机之前的通信。



二、端口定义

端口是传输层的一部分,主要用于区分同一台设备上的不同应用程序或服务。即,不同的进程有不同的端口号。

根据规定:

  • 端口号由一个 16 位的数字表示,范围是 0~65535;
  • 不同的协议(如 TCP,UDP),各自的端口范围都是 0~65535,即,不同协议 + 同一端口号不冲突;
  • 单个协议下,端口号不能冲突。例如,TCP 协议下,同一时间内只有一个进程可以使用 8080 端口。否则就会抛出端口被占用的问题。


三、端口分类

1. 公有端口

公有端口,范围 0~1023,这些端口通常由系统保留,用于常见的网络服务。

  • 21:FTP(文件传输协议)
  • 22:SSH(安全壳层协议)
  • 23:Telent(远程监听)
  • 25:SMTP(简单邮件传输协议)
  • 80:HTTP(超文本传输协议)
  • 443:HTTPS(安全的超文本传输协议)

2. 注册端口

程序注册端口,范围 1024~49151,这些端口分配给用户或程序注册使用,需要注意冲突问题。

  • 3306:MySQL 数据库
  • 8080:Tomcat
  • 1521:Oracle

3. 动态 / 私有端口

动态/私有端口,范围 49151~65535,通常用于临时会话,由操作系统自动分配给客户端应用程序。

  • 当浏览器连接到一个 Web 服务器时,它可能会使用一个动态端口作为源端口。
  • 通过 IDEA 打开网页时,会使用本机的一个动态端口。


四、DOS 命令

1. 查看端口 / 进程

# 查看所有端口
netstat -ano
# PID 进程号,不是端口号
# 协议 本地地址 外部地址 状态 PID# 根据 port 查看指定端口
# | 管道符,用于过滤
netstat -ano|findstr "port"# 根据 PID 查找进程
tasklist|findstr "PID"

2. 其他

# 打开任务管理器
Ctrl + Shift + ESC# 配置 IP 的映射
# 通过 C:\Windows\System32\drivers\etc\hosts
127.0.0.1       localhost


五、代码实现

1. InetSocketAddress 类

InetSocketAddress 是 Java 网络编程中的一个类,位于 java.net 包中。

它用于表示包含 IP 地址和端口号的套接字地址,通常与 ServerSocketSocketDatagramSocketURL 一起使用,以指定网络连接的目标地址或监听地址。


在这里插入图片描述


2. 测试 socket

在 Java 中,通过套接字 socket 获取 IP 地址和 端口号,以此定位一个网络地址。

然后获取这个网络地址中的相关信息,例如,IP 地址,主机名,端口号。

  • getAddress():返回 InetAddress 对象,表示此套接字地址的 IP 地址。
  • getHostName():返回此套接字地址的主机名。如果创建 InetSocketAddress 时提供了 IP 地址而不是主机名,则返回 IP 地址的字符串表示形式。
  • getPort():返回此套接字地址的端口号。
public class TestInetSocketAddress {public static void main(String[] args) {// 定位主机 + 端口号InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);System.out.println(socketAddress);System.out.println(socketAddress2);// 总的地址System.out.println(socketAddress.getAddress());// 默认是 IP 地址,想要主机名,可以在 host 系统文件中配置映射System.out.println(socketAddress.getHostName());// 端口号System.out.println(socketAddress.getPort());}
}

六、端口映射

端口映射(Port Forwarding)是一种网络技术,用于将外部网络的请求转发到内部网络中的特定设备和端口。

运行在计算机上的应用程序(进程),会有自己的运行端口,其他主机发送过来的消息要想被应用程序成功接收到,除了要通过 IP 地址,还需要定位应用程序的端口

(程序是静止的,进程是程序的运行态)

如下图,在两台不同的主机中,分别跑了两个进程:QQ 和 MSN。

  • 它们给 QQ 进程分配的端口为 8998,给 MSN 进程分配的端口为 7777;
  • 假如主机 1 想通过 QQ 给主机 2 的 QQ 发消息,那么它需要发到主机 2 的端口 8998 上;
  • 由于主机 2 端口 8998 对应 QQ 进程,因此发到端口 8998 的消息会在 QQ 进程上被接收。
  • 如果主机 1 发到了主机 2 的 7777 端口上,消息就会给 7777 端口对应的 MSN 进程,但 MSN 不会接收来自 QQ 的消息,所以这个消息被视为垃圾消息,于是就丢了。(除非 MSN 上有对应的模块可以处理这个消息,给它转到 QQ 对应的地方)

在这里插入图片描述


一段历史:QQ 的前身是 QICQ,和微软绑定的 MSN 类似,但由于微软的放任,加上时代的浪潮,QQ 获得了成长空间,逐渐羽翼丰满。可以说,QQ 抓住了这个机会,同时也非常注重风险防范。



参考资料

狂神说 - 网络编程:https://www.bilibili.com/video/BV1LJ411z7vY

Java 8 帮助文档:https://docs.oracle.com/javase/8/docs/api/

相关文章:

网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取

一、概述 记录时间 [2024-12-19] 前置文章: 网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型 网络编程 02:IP 地址,IP 地址的作用、分类,通过 …...

制作项目之前的分析

对网页的分析可以从多个角度入手,具体包括内容分析、技术分析、用户体验分析。 以下是对网页分析的详细步骤,帮助你从不同维度评估一个网页的效果与质量: 1. 内容分析 内容是网页最核心的部分,确保其符合用户需求是网页设计的首…...

LeetCode 1925 统计平方和三元组的数目

探索平方和三元组:从问题到 Java 代码实现 在数学与编程的交叉领域,常常会遇到一些有趣且富有挑战性的问题。今天,就让我们深入探讨一下 “平方和三元组” 这个有趣的话题,并使用 Java 语言来实现计算满足特定条件的平方和三元组…...

java开发入门学习三-二进制与其他进制

常见的进制 常用的进制有二进制,八进制,十进制,十六进制。而我们最熟悉的是十进制,他们分别是怎么表达的呢? 定义不同的进制,写法不同 二进制(Binary): 使用前缀 0b 或…...

C/S软件授权注册系统(Winform+WebApi+.NET8+EFCore版)

适用软件:C/S系统、Winform桌面应用软件。 运行平台:Windows .NETCore,.NET8 开发工具:Visual Studio 2022,C#语言 数据库:Microsoft SQLServer 2012,Oracle 21c,MySQL8&#xf…...

Linux —— 管理进程

一、查看进程 运行态(Running) 定义:处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中,同一时刻只有一个进程处于运行态;在多 CPU 或多核系统中,可能有多个进程同时处于运行态。示例: 当…...

Diffusino Policy学习note

Diffusion Policy—基于扩散模型的机器人动作生成策略 - 知乎 建议看看,感觉普通实验室复现不了这种工作。复现了也没有太大扩展的意义。 Diffusion Policy 是监督学习吗 Diffusion Policy 通常被视为一种基于监督学习的方法,但它的实际训练过程可能结…...

【Python】*args和**kwargs

【Python】*args和**kwargs 一、*args: 接收不定数量的位置参数示例1:简单的加法计算器示例2:转发参数给另一个函数 二、**kwargs: 接收不定数量的关键字参数示例3:创建用户配置文件示例4:合并多个字典 三、组合使用*args和**kwar…...

使用正则表达式提取PDF文件页数的实现方案

文章目录 背景介绍实现原理代码实现1. 基础函数结构2. 页数提取逻辑3. 使用示例 正则表达式解析优点与局限性优点局限性 错误处理建议性能优化建议最佳实践建议总结参考资源 背景介绍 在Web应用开发中,我们经常需要获取上传PDF文件的页数信息。虽然可以使用pdf.js等第三方库,但…...

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言: 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果,可以使RecyclerView的边缘在滚动时逐渐淡出或淡入,以提升用户体验。 2.Recyclerview属性: 2.1、requiresFading…...

springboot443旅游管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大,容错率低&#…...

利用git上传项目到GitHub

GitHub是基于git实现的代码托管。git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好。 GitHub可以免费使用,并且快速稳定。 利用GitHub,你可以将项目存档,与其他人分享交流,并让其他开发者帮助你一…...

Rust之抽空学习系列(四)—— 编程通用概念(下)

Rust之抽空学习系列(四)—— 编程通用概念(下) 1、函数 函数用来对功能逻辑进行封装,能够增强复用、提高代码的可读 以下是函数的主要组成部分: 名称参数返回类型函数体 1.1、函数名称 在Rust中&…...

K-Means 聚类:数据挖掘的瑞士军刀

引言 在数据科学领域,聚类算法是一种非常重要的无监督学习方法,它能够帮助我们发现数据中的自然分组或模式。其中,K-Means 聚类算法因其简单高效而成为最常用的聚类算法之一。无论是市场细分、社交网络分析,还是图像分割等领域&a…...

项目练习:若依-前端项目的目录结构介绍

文章目录 一、目录截图二、目录讲解 一、目录截图 二、目录讲解 1、首先,我们可以看到,这个VUE项目,只有一个App.vue,所以,它是一个单页面系统。 这个App.vue是根组件,root组件。 2、public目录 在Vue 3.…...

知网研学 | 知网文献(CAJ+PDF)批量下载

知网文献(CAJPDF)批量下载 一、知网研学安装二、插件及脚本安装三、CAJ批量下载四、脚本下载及PDF批量下载浏览器取消拦截窗口 一、知网研学安装 批量下载知网文件,格式为es6文件,需使用知网研学软件打开,故需先安装该…...

设计模式期末复习

一、设计模式的概念以及分类 二、设计模式的主题和意图 三、面向对象程序设计原则,记住名字,还要理解它的使用场景以及如何用? 四、松耦合、紧耦合、强关联、弱关联、静态复用、动态复用的概念,还有静态委派,动态委…...

CentOS7源码编译安装nginx+php+mysql

1.安装nginx 安装依赖 yum -y install gcc gcc-c wget automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl openssl-devel 创建一个不能登录的nginx运行用户 groupadd www-data useradd -s /sbin/nologin -g www-d…...

linux CentOS系统上卸载docker

一、停止Docker服务 首先,需要停止Docker服务。使用systemctl命令来停止Docker服务: bash复制代码sudo systemctl stop docker二、卸载Docker软件包 接下来,使用CentOS的包管理器yum来卸载Docker软件包。根据安装的Docker版本和组件&#…...

css中相对定位的应用场景

元素位置微调 文本与图标组合微调&#xff1a;在网页设计中&#xff0c;经常会有文本和图标的组合&#xff0c;比如一个带有搜索图标的搜索框。可以使用相对定位来微调图标在搜索框内的位置。例如&#xff0c;有以下HTML结构&#xff1a; <input type"text" class…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...