【JavaEE】_网络编程基础

目录

1. 网络编程基础

1.1 网络编程定义

1.2 网络编程中的基本概念

1.2.1 API

1.2.2.发送端和接收端

1.2.3 请求和响应

1.2.4 客户端和服务端

2. Socket 套接字

2.1 概念

2.2 分类

3. UDP数据报套接字编程

3.1   DatagramSocket API

3.1.1 含义

3.1.2 构造方法

3.1.3 常用方法

3.2   DatagramPacket API

3.2.1 含义

3.2.2 构造方法

 3.2.3 常用方法


1. 网络编程基础

1.1 网络编程定义

网络编程是指网络上的主机,通过不同的进程,以编程的方式实现网路通信(或称为网络数据传输);

1.2 网络编程中的基本概念

1.2.1 API

1. 进行网络编程时,需要操作系统提供的API才能实现编程;

2. API可以认为是应用层与传输层之间交互的路径

3. 用于网络编程的API称为Socket API;

1.2.2.发送端和接收端

发送端:数据的发送方进程,发送端主机即网络通信中的源主机;

接收端:数据的接收方进程,接收端主机即网络通信中的目的主机;

发送端和接收端是相对的,只是一次网络数据传输产生数据流向后的概念;

1.2.3 请求和响应

一般来说获取一个网络资源,涉及到两次网络数据传输:

第1次:请求数据的发送;

第2次:响应数据的发送;

1.2.4 客户端和服务端

服务端:在常见的网络数据传输场景下,把提供服务的一方进程称为服务端,可以提供对外服务;

客户端:获取服务的一方进程称为客户端;

对于服务来说,一般是提供:

(1)客户端获取服务资源;

(2)服务器保存客户端资源;

2. Socket 套接字

2.1 概念

1. Socket套接字是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。

2. socket是操作系统中的一个概念,本质上是一种特殊的文件,Socket是将网卡抽象为文件,向socket文件中写数据,就相当于通过网卡发送数据,从socket文件读数据,就相当于通过网卡接收数据,从而实现了网络通信和文件操作的统一

2.2 分类

socket API是与传输层密切相关的,传输层提供了两个最核心的协议:UDP和TCP,

因此socket也提供了两种风格:UDP风格与TCP风格;

TCP:有连接(需要建立连接才能通信,如打电话)、可靠传输(发送方明确消息是否发送成功,如有已读标志的社交软件),面向字节流(数据传输的基本单位是字节),全双工(同上);

UDP:无连接(无需建立连接才能通信,如发短信)、不可靠传输(只负责传输,不论是否传输成功,如QQ、微信)、面向数据报(数据传输的基本单位是数据报,具有严格格式,可能是若干个字节),全双工(双向同时通信);

注:(1)在计算机中,抽象的连接是很常见的,连接本质上就是建立连接的双方各自保存对方的信息,故而对于无连接的UDP,需要程序员调用UDP的socket api时把对方的位置等信息发送过去。

(2)网络通信数据的基本单位涉及到多种说法,包括数据报(Datagram)、数据包(Packet)、数据帧(Frame)、数据段(Segment);

3. UDP数据报套接字编程

3.1   DatagramSocket API

3.1.1 含义

Datagram表示网卡的一个特殊文件,使用这个类表示一个socket对象,在操作系统中将这个socket对象当做一个文件来处理,相当于是文件描述符表上的一项:

注:① 普通文件对应的硬件设备是硬盘,socket对象对应的硬件设备是网卡

② 一个socket对象即可与另一台主机进行通信了,如需与多台主机通信,需创建多个socket对象;

在Java中就使用DatagramSocket类表示系统内部的socket文件

3.1.2 构造方法

// 创建一个socket对象     
DatagramSocket();
// 传入一个端口号,令当前的socket对象与指定的端口(简单整数)关联起来
DatagramSocket(int port);

注:① 端口号用于标识主机上的不同应用程序;

② 本质上说,并非进程与端口建立联系,而是进程中的socket对象与端口建立联系;

③ 对于第一种没有传入指定端口号的构造方法,系统会自动分配一个空闲端口;

3.1.3 常用方法

//接收
void receive(DatagramPacket p);
//发送
void send(DatagramPacket p);
//关闭
void close()

注:① 用于接收和发送的都是DatagramPacket对象

② 接收方法中的DatagramPacket对象p相当于是一个空对象,receive方法内部会对参数的这个空对象进行内容填充(数据来自网卡),从而构造出一个结果数据,参数是一个输出型参数

③类似于文件操作,使用完后需要使用close方法进行资源的释放;

3.2   DatagramPacket API

3.2.1 含义

1. DatagramPacket表示一个UDP的数据报,包含一些具体数据;

2. UDP传输是面向数据报的,每次进行传输时以UDP数据报为基本单位;

3.2.2 构造方法

// 构造buf缓冲区
DatagramPacket(byte[] buf, int length);
// 构造缓冲区与地址,SocketAddress表示IP+端口号
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address);

注:① 构造DatagramPacket对象时可以指定一些具体的数据,如字节数组缓冲区,地址;

② byte[]数组:

 3.2.3 常用方法

// 从接收的数据报中获取发送端主机的IP地址或从发送的数据报中获取接收端主机的IP地址
InetAddress getAddress();
// 从接收的数据报中获取发送端主机的端口号或从发送的数据报中获取接收端主机的端口号
int getPort();
// 获取数据报中的数据
byte[] getData();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++---判断闰年

一.闰年的定义 闰年是指在公历中,年份可以被4整除但不能被100整除的年份,或者可以被400整除的年份。简单来说,闰年是一个比平年多出一天的年份,即2月有29天。闰年的目的是校准公历与地球公转周期的差异,确保时间计算的…

记录一次QT乱码问题

问题描述 在敲陆文周的书《QT5开发及实例》的示例代码时,出现乱码,如下图所示 具体代码如下 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->treeWidget->clear();int groupSize 2;int ite…

【C++类与对象】继承

继承 一、继承基本语法二、继承方式1、公共继承public2、保护继承protected3、私有继承private 三、对象模型四、继承中的构造与析构顺序五、同名成员处理方式同名静态成员处理方法 六、多继承语法(不建议使用)七、菱形继承(钻石继承&#xf…

R 语言学习 case3:柱状图(ggchart)

主要涉及到对图的优化,使用ggchart工具包 ggchart 链接:https://thomas-neitmann.github.io/ggcharts/index.html step1: 安装工具包 install.packages("ggcharts") install.packages("tidytext")step2: 导入工具包 library(dplyr…

高性能前端UI库 SolidJS | 超棒 NPM 库

SolidJS是一个声明式的、高效的、编译时优化的JavaScript库,用于构建用户界面。它的核心特点是让你能够编写的代码既接近原生JavaScript,又能够享受到现代响应式框架提供的便利。 SolidJS的设计哲学强调了性能与简洁性。它不使用虚拟DOM(Vir…

makefile中的伪目标和模式匹配

文章目录 makefile,伪目标和模式匹配 makefile,伪目标和模式匹配 伪目标 .PHONY:clean 声明目标为伪目标之后,makefile将不会判断目标是否存在或该目标是否需要更新, 简单来说就是不会受到一些同名的文件的影响,也会进来makefi…

Ubuntu使用docker-compose安装mysql8或mysql5.7

ubuntu环境搭建专栏🔗点击跳转 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7 文章目录 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7MySQL81.新建文件夹2.创建docke…

ERP进出库+办公用品管理系统

系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品,提高整体系统整合行,加大上下级之间的联系,规避因人员过多,而浪费人力在简单重复的工作中&#xf…

Python项目——搞怪小程序(PySide6+Pyinstaller)

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

【前后端分离与不分离的区别】

Web 应用的开发主要有两种模式: 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期,Web 应用开发主要采用前后端不分离的方式,它是以后端直接渲染模板完成响应为主的一种开发模式。以前后端不…

探索Vue3:深入理解响应式语法糖

🚀 欢迎来到我的专栏!专注于Vue3的实战总结和开发实践分享,让你轻松驾驭Vue3的奇妙世界! 🌈✨在这里,我将为你呈现最新的Vue3技术趋势,分享独家实用教程,并为你解析开发中的难题。让我们一起深入Vue3的魅力,助力你成为Vue大师! 👨‍💻💡不再徘徊,快来关注…

Java编程练习之this关键字(2)

this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。 示例:创建一个类文件,在类中定义Book类型的方法,并通过this关键字进行返回。 public class Book{ public Book getBook(){ return this; } } 在getB…

list列表可编辑状态

有时候list需要修改或选择属性,mfc自带的只能显示内容,基本上是不可以修改,为了实现这个功能需求,需要完成一下步骤转换. 第一步记录选择的单元格. 第二步创建一个编辑框CComboBox对象, 设置字体,窗口属性. 第三步获取选中单元格的位置信息. 第四步获取单元格内容信息. 第五步…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了,这个最短路我学了好几天,当然也学了别的算法啦,也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图,要求的是图中一个点到起点的距离,其中我们要输入点和点之间的距离,来求…

【EFCore仓储模式】介绍一个EFCore的Repository实现

阅读本文你的收获 了解仓储模式及泛型仓储的优点学会封装泛型仓储的一般设计思路学习在ASP.NET Core WebAPI项目中使用EntityFrameworkCore.Data.Repository 本文中的案例是微软EntityFrameworkCore的一个仓储模式实现,这个仓储库不是我自己写的,而是使…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…

章鱼网络 Community Call #17|打造全新 Omnity 跨链协议

香港时间2024年1月8日12点,章鱼网络举行第17期 Community Call。 对于 Octopus Community 而言,2023年是一个分水岭。我们如期兑现我们的承诺,成功上线了包括 $NEAR Restaking 和 Adaptive IBC 在内的完整的 Octopus 2.0。 自从我们在2023年…

HarmonyOS 应用开发入门

HarmonyOS 应用开发入门 前言 DevEco Studio Release版本为:DevEco Studio 3.1.1。 Compile SDK Release版本为:3.1.0(API 9)。 构建方式为 HVigor,而非 Gradle。 最新版本已不再支持 (”Java、JavaScrip…

Leetcode的AC指南 —— 栈与队列:225.用队列实现栈

摘要: **Leetcode的AC指南 —— 栈与队列:225.用队列实现栈 **。题目介绍:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 …

web渗透安全学习笔记:2、HTML基础知识

目录 前言 HTML的标题 段落链接与插入图片 HTML元素 HTML属性 HTML头部 HTML与CSS HTML与JavaScript 表格与列表 HTML区块 布局 HTML表单 HTML与数据库 音频与视频 HTML事件 前言 HTML的标题 <!DOCTYPE html> <html> <head> <meta chars…