网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection

news2025/3/17 19:35:27

DAY12.1 Java核心基础

网络编程

在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分

那如何实现javaWeb编程呢?

Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输

计算机网络基本知识

计算机网络是通过硬件设施,传输媒介把不同物理地址上的计算机网络进行连接,形成一个资源共享和数据传输的网络系统

两台终端进行连接需要遵守规定的网络协议

  • 语法:数据信息的结构
  • 语义:描述请求、动作、响应
  • 同步:动作的实现顺序

网络通信协议包括TCP/IP协议,IPX/SPX协议,NetBEUI协议,最常用的是TCP/IP协议

TCP/IP协议的分层思想

分层的优点:

  • 维护性扩展性好
  • 有利于系统的优化

分层思想好处是只需要关注自己的业务,不需要关注其它层的业务,把传递过来的数据处理传递给下一层即可

比如java代码的运行,它是运行在JVM虚拟机的,所以可以在不同的操作系统运行,做到了代码的跨平台性

TCP/IP协议分为 4 层:

  • 应用层:整个体系结构中的顶层,通过应用之间的数据交互完成网络应用
  • 传输层:为两台终端的数据交互提供数据传输服务
  • 网络层:也叫 IP 层,负责为网络不同的终端提供通信服务
  • 网络接口层:包括数据链路层物理层,数据链路层:为数据传输提供链路协议,物理层指的是光纤、电缆、电磁波等真实存在的物理媒介,这些媒介可以传送网络信号

A发消息给B的数据传输路线图:

image-20250316144220802

IP和端口

IP

IP地址:互联网中每个终端的唯一标识,网路请求可以根据这个找到具体的计算机

IP地址 = 网络地址,主机地址,网络地址的作用是找到主机所在的网络,主机地址是找到网络中的主机

IP地址分为5类,各类地址的IP数量不同

分类范围
A类1.0.0.1~126.255.255.254
B类128.0.0.1~191.255.255.254
C类192.0.0.1~233.255.255.254
D类224.0.0.1~239.255.255.254
E类240.0.0.1~255.255.255.254

实际开发不用记住本机的IP地址

可以用127.0.0.1或者localhost表示本机地址

Java 中有专门的类来描述 IP 地址,这个类是 java.net.InetAddress

方法描述
public static InetAddress getLocalHost()获取本地主机的 InetAddress 对象
public static InetAddress getByName(String host)通过主机名称创建 InetAddress 对象
public String getName()获取主机名称
public String getHostAddress()获取主机 IP 地址
pubilc static InetAddress getByAddress(String host,byte[] addr)通过主机名称和 IP 地址创建 InetAddress 对象
public static InetAddress getByAddress(byte[] addr)通过 IP 地址创建 InetAddress 对象

端口

IP好比酒店的地址,那么端口就是房间号,IP地址需要结合端口来一起使用,不然找不到具体的应用

比如微信和QQ,他们两个软件运行在电脑的不同端口上面

还有我们常见的软件的默认端口

MySql:localhost:3306

Tomcat:localhost:8080

URL 和 URLConnection

URI(Uniform Resource Identifier)

网络资源是网络中真实存在的实体,比如文字、音频、图片、视频…

如何通过程序获取网络资源呢?

我们可以使用URI

URI:统一资源定位符,可以指向目标实体

Java.net包里面封装了一个类 URI ,使用 URI 的实例化对象就可以管理网络资源

public static void main(String[] args) {
    URI uri = URI.create("http://localhost:8080/user/login");
    System.out.println(uri);
    System.out.println(uri.getHost());
    System.out.println(uri.getPort());
    System.out.println(uri.getPath());
}

URL(Uniform Resource Locator)

URL:统一资源位置,在 URI 的基础上进行了扩充,在定位资源的同时还提供了对应的网络地址,Java 也对 URL 进行了封装

方法描述
public URL(String protocol,String host,int port,String file)根据协议、IP地址、端口号、资源名称获取URL对象
public final InputStream openStream()获取输入流对象
public static void main(String[] args) throws Exception {
    URL url = new URL("http", "127.0.0.1", 80, "/index.html");
    System.out.println(url.getPath());
    System.out.println(url.getHost());
    System.out.println(url.getPort());
    System.out.println(url.getProtocol());
    InputStream inputStream = url.openStream();
    InputStreamReader reader = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(reader);
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
}

URLConnection

URLConnection 用来描述 URL 指定资源的连接,是一个抽象类,常用的子类有 HttpURLConnection,URLConnection 底层是通过 HTTP 协议来处理的,它定义了访问远程网络资源的方法,通过 URLConnection 可以获取到 URL 资源的相关信息

方法描述
public int getContentLength()返回资源的长度,返回值为 int 类型
public long getContentLengthLong()返回资源的长度,返回值为 long 类型
public String getContentType()返回资源的类型
public abstract void connect()判断连接的打开或关闭状态
public InputStream getInputStream()获取输入流对象
URLConnection urlConnection = new URL("https://www.baidu.com").openConnection();
// 获取内容长度
System.out.println(urlConnection.getContentLength());
// 获取内容长度Long类型
System.out.println(urlConnection.getContentLengthLong());
// 获取类型
System.out.println(urlConnection.getContentType());
// 获取编码
System.out.println(urlConnection.getContentEncoding());
// 获取URL
System.out.println(urlConnection.getURL());
urlConnection.connect();
// 获取输入流
InputStream inputStream = urlConnection.getInputStream();
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
}

TCP协议

TCP 协议是面向连接的运算层协议,比较复杂,应用程序在使用TCP协议之前必须建立连接,才能传输数据,数据传输完毕之后需要释放连接

就好比现实生活中的打电话,首先确保电话打通了才能进行通信,如果没有打通则阻塞,需要等待打通才能对话

TCP优缺点:

  • 优点:安全可靠,数据不会丢失,并且数据是按照先后顺序依次到达
  • 缺点:速度慢,效率低,常用于对于业务安全要求较高的场景

Java中如何使用 TCP 呢?

java中通过Socket类来建立TCP连接,使用这个类可以在服务端和客户端建立一个可靠的连接

Socket表示客户端,ServerSocket表示服务端

它们都在java.net包中

在服务端创建ServerSocket对象,通过对象的accept()方法可以接收到若干个表示客户端的Socket对象

代码示例 我们请看下一篇

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

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

相关文章

自探索大语言模型微调(一)

一、数据 1.1、失败案例 Hugging Face: 根据B站上搜索到的资料,datasets这个库可以直接下载丰富的数据集合和与训练模型,调用也非常的简单,唯一的缺点就是,需要外网(翻墙),用国内的…

Unity 和 Python 的连接(通过SocketIO)附源码

在游戏或者项目开发中,Unity 通常用于创建前端,而 Python 则因其强大的数据处理能力常被用作后端。通过 Socket.IO,我们可以轻松地实现 Unity 和 Python 的实时通信。本文将介绍如何通过 Socket.IO 连接 Unity 和 Python,并附上完…

89.HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用 文章目录 HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可…

spring boot 发送邮件验证码

一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…

MySQL连接较慢原因分析及解决措施

文章目录 整体说明一、问题现象二、问题分析2.1、DNS反向解析问题2.2、网络问题2.3、SSL/TLS协商问题2.4、自动补全的延迟 三、问题解决 摘要&#xff1a; MySQL连接较慢原因分析及解决措施 关键词&#xff1a; MySQL、连接缓慢、客户端、参数设置 整体说明 在使用MySQL的时候…

【大模型基础_毛玉仁】2.5 基于 Decoder-only 架构的大语言模型 -- GPT和LLaMa模型介绍

更多内容&#xff1a;XiaoJ的知识星球 目录 2.5 基于 Decoder-only 架构的大语言模型2.5.1 Decoder-only 架构2.5.2 GPT 系列语言模型1&#xff09;初出茅庐&#xff1a;GPT-1 模型2&#xff09;小有所成&#xff1a;GPT-2 模型3&#xff09;崭露头角&#xff1a;GPT-3 模型4&a…

如何解决ChatGPTplus/pro o1/o3模型无法识别图片或者文件,限制次数?

你是否遇到ChatGPTplus无法识别图片、或者无法识别文件&#xff0c;甚至回答很简短&#xff0c;o1不思考&#xff0c;GPT-4o不能联网、分析图片和处理文件&#xff01;感觉非常敷衍。本文教你如何确定自己的账号是否被降智&#xff1b;教你如何降智的原因&#xff1b;教你解决降…

go的gmp

参考链接&#xff1a;https://www.bilibili.com/video/BV19r4y1w7Nx Golang的GMP调度模型(协程调度器)是其并发编程的核心。GMP代表Goroutine、Machine和Processor三个关键组成部分。Goroutine是Go语言中的轻量级线程&#xff0c;Machine是操作系统的线程&#xff0c;Processor…

Vue开发者工具(VueDevtools)下载与安装

一、这里采用极简插件 网址&#xff1a;chrome.zzzmh.cn/index#/inde… 输入 vue.js.devtools并访问 点击推荐下载 下载到本地解压缩 然后把这个文件移动到谷歌插件里面,开启开发者模式 点击详情,开启一些权限 写的一个demo&#xff0c;如果有vue代码的话&#xff0c;就会…

【Linux】https 协议

目录 一、https 协议 二、加密和解密 &#xff08;一&#xff09;为什么需要加密与解密 &#xff08;二&#xff09;加密和解密的过程 &#xff08;二&#xff09;常见的加密方式 1、对称加密 2、非对称加密 3、数据摘要 4、数字签名 三、https 的加密方式 &#xff…

新手村:数据预处理-特征缩放

新手村&#xff1a;数据预处理-特征缩放 特征缩放&#xff08;Feature Scaling&#xff09;是数据预处理中的一个重要步骤&#xff0c;特别是在应用某些机器学习算法时。特征缩放可以使不同尺度的特征具有相同的量级&#xff0c;从而提高模型训练的效率和性能。常见的特征缩放方…

Xinference大模型配置介绍并通过git-lfs、hf-mirror安装

文章目录 一、Xinference开机服务systemd二、语言&#xff08;LLM&#xff09;模型2.1 配置介绍2.2 DeepSeek-R1-Distill-Qwen-32B&#xff08;大杯&#xff09;工具下载git-lfs&#xff08;可以绕过Hugging Face&#xff09; 2.3 DeepSeek-R1-Distill-Qwen-32B-Q4_K_M-GGUF&am…

0x04.若依框架微服务开发(含AI模块运行)

微服务本地开发硬件资源有限&#xff0c;所以会将核心微服务组件先部署在服务器上比如&#xff1a;mysql&#xff0c;redis&#xff0c;注册中心Nacos&#xff0c;网关Gateway&#xff0c;认证中心Auth和upms模块以及低代码生成模块。 mysql、redis部署前篇已讲&#xff0c;这…

判断是不是二叉搜索树(C++)

目录 1 问题描述 1.1 示例1 1.2 示例2 2 解题思路 3 代码实现 4 代码解析 4.1 中序遍历函数 inorder 4.2 主函数 isValidBST 初始化及中序遍历调用 4.3 检查数组中元素是否严格递增 4.4 返回验证结果 5 总结 1 问题描述 给定一个二叉树根节点&#xff0c;请你判断…

Linux--gdb/cgdb

ok&#xff0c;我们今天学习gdb的安装和使用 调试器-gdb/cgdb使用 VS、VScode编写的代码一般都是release格式的&#xff0c;gdb 的格式一般是debug 换成debug模式命令 :-g gdb会记录最新的一条命令&#xff0c;直接回车就是默认执行该命令 一个调试周期下&#xff0c;断点…

超精密工件小孔几何尺寸测量:自动化解决方案

下载链接&#xff1a;&#xff08;最新版本&#xff09;超精密工件小孔几何尺寸测量&#xff1a;自动化解决方案python脚本代码&#xff0c;可直接运行&#xff0c;内包含测试数据&#xff0c;亲测好用资源-CSDN文库 在现代制造业中&#xff0c;超精密工件的质量控制至关重要&a…

Blender-MCP服务源码1-项目解读

Blender-MCP服务源码 有个大佬做了一个Blender-MCP源码&#xff0c;第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间&#xff0c;所以想从0开始学习这个代码&#xff0c;了解一下大佬们的开发思路 1-核心知识点 1&#xff09;第一版&#xff1…

小程序配置

注册小程序账号和安装开发工具 参考文档&#xff1a;注册小程序账号和安装开发工具https://blog.csdn.net/aystl_gss/article/details/127878658 HBuilder新建项目 填写项目名称&#xff0c;选择UNI-APP&#xff0c;修改路径&#xff0c;点击创建 manifest.json 配置 需要分别…

基于Python的selenium入门超详细教程(第1章)--WebDriver API篇

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 参照博文&#xff1a;selenium入门超详细教程——网页自动化操作-CSDN博客 目录 前言 一、WebDriver API介绍 1.1 什么是WebDriver? 1.2 工…

每日Attention学习26——Dynamic Weighted Feature Fusion

模块出处 [ACM MM 23] [link] [code] Efficient Parallel Multi-Scale Detail and Semantic Encoding Network for Lightweight Semantic Segmentation 模块名称 Dynamic Weighted Feature Fusion (DWFF) 模块作用 双级特征融合 模块结构 模块思想 我们提出了 DWFF 策略&am…