【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();

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

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

相关文章

【C++记忆站】类和对象(一)

类和对象(一) 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间…

计算机:无所不在的角色与跨学科函数概念的生动探索

The Computer’s Ubiquitous Role and the Conceptual Underpinnings of Functions Across Disciplines: A Vivid Exploration 计算机:无所不在的角色与跨学科函数概念的生动探索 A computer is an extraordinary apparatus that has the remarkable ability to exe…

初识HarmonyOS

文章目录 本章节目标一、 HarmonyOS简介初识HarmonyOSHarmonyOS系统定位HarmonyOS典型应用场景 二、HarmonyOS架构与安全1. HarmonyOS架构解析内核层系统服务层框架层应用层应用服务智能分发 2. HarmonyOS系统安全正确的人正确的设备正确地使用数据 三、HarmonyOS关键特性1. 硬…

redis远程连接不上解决办法

问题描述: redis远程服务端运行在192.168.3.90计算机上,客户端计算机(ip:192.168.3.110)通过redsi-cli.exe客户端工具连接时,没有反应,连接不上。 如图所示: 解决步骤: 步骤一&…

USB-C接口给显示器带来怎样的变化?

随着科技的不断发展,Type-C接口已经成为现代电子设备中常见的接口标准。它不仅可以提供高速的数据传输,还可以实现快速充电和视频传输等功能。因此,使用Type-C接口的显示器方案也受到了广泛的关注。本文将介绍Type-C接口显示器的优势、应用场…

如何进行正确的 CodeReview

软件开发生命周期中至关重要的一步是代码审查。它使开发人员能够显著提升代码质量。它类似于书籍的创作过程。首先,作者写故事,然后经过编辑以确保不会出现诸如混淆“you’re”和“yours”之类的错误。在这个语境中,代码审查指的是检查和评估…

Python项目——计算器(PySide6+Pyinstaller)

1、介绍 使用python编写一个计算器,可以实现基本的运算。【注】该项目最终还有一些细小的bug没有完善,例如符号可以一直输入。 2、实现 使用pyCharm创建一个新的项目。 2.1、设计UI 使用Qt designer设计一个UI界面,保存ui文件&#xff0…

直流过欠压继电器JSZD-1A DC220V 0-220V 面板嵌入式安装

一、 概述 JSZD-1系列直流电压继电器是专为直流系统设计的,以进口大规模集成电路为核心,配以本厂研制的模块和部分外围元件组装而成。具有通用性好、互换性强、寿命长、外形美观大方、性能稳定可靠等特点。 JSZD-1系列直流电压继电器既是一块过、欠压继…

Python 类变量和实例变量详解

更多资料获取 📚 个人网站:ipengtao.com 在Python中,变量分为类变量和实例变量两种类型,它们有着不同的作用范围和生命周期。理解这两种变量类型的区别对于面向对象编程非常重要。本文将详细介绍Python中的类变量和实例变量&…

CentOS7 LAMP环境安装部署Zabbix

CentOS7 LAMP环境安装部署Zabbix 查看CentOS版本号 more /etc/redhat-release server 最好配置静态IP地址、DNS,在DHCP服务器将此IP地址排除掉。 Hostname 改为zabbix 服务端:172.20.26.137 客户端:172.20.26.113 Zabbix服务端安装及配…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数: {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数: 在请求中pre-req页面下 //手动的获得时间戳 var…

四个简单的bat脚本

Windows11 最大劝退点就是这个右键菜单,复制粘贴都变成一点点的小图标,最气人的是点击底部的显示更多选项才能展示全部功能。让许多本来点一次就能完成的操作变成两次。其实使用一个小命令就能修改回win10版本的菜单。四个简单的bat脚本,能完…

探索指针的奇妙世界,程序中的魔法箭头(上)

目录 一.指针是什么二.指针和指针类型1.指针加减整数2.指针的解引用 三.野指针1.野指针形成的原因(1)指针未初始化指针越界访问 2.如何规避野指针(1)指针初始化(2)小心指针越界(3)指…

第七回 林教头刺配沧州道 鲁智深大闹野猪林-FreeBSD/Linux图形界面安装配置

高俅定林冲:手持利刃,故入节堂,杀害本官的罪名,将林冲押解去开封府,暗示开封府将林冲处决。 开封府负责办案的叫孙定,他为人刚正不阿,宅心仁厚。在他的据理力争之下,开封府尹最终对…

【计算机网络】TCP握手与挥手:三步奏和四步曲

这里写目录标题 前言三次握手四次挥手三次握手和四次挥手的作用TCP三次握手的作用建立连接防止已失效的连接请求建立连接防止重复连接 TCP四次挥手的作用:安全关闭连接避免数据丢失避免半开连接 总结: 总结 前言 TCP(传输控制协议&#xff09…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目,运行ios环境的时候报错没有CocoaPods,安卓环境可以正常运行,当时一脸懵逼,网上搜索了一下,有给我讲原理的,还有让我安装这插件那插件的,最终把电脑搞得卡死&#x…

25计算机考研408专业课复习计划

点击蓝字,关注我们 今天要分享的是25计算机考研408专业课复习计划。 以下内容供大家参考,大家要根据自己的复习情况进行适当调整。 统考与自命题 统考科目是指计算机学科专业基础综合(408),满分150分,试…

鸿蒙开发环境配置-Windows

背景 入局鸿蒙开发,发现在 Windows 下面配置安装相关环境并没有像 Mac 一样简单,过程中遇到了一些问题记录一下。 Devceo Studio 下载安装 目前鸿蒙的 IDE 最新版是 4.0,通过这个连接可以下载,鸿蒙4.0下载连接。选择符合我们电…

【设计模式】责任连模式怎么用?

我将通过一个贴近现实的故事——请假审批流程,带你了解和掌握责任链模式。 什么是责任链模式? 责任链模式是一种行为设计模式,它让你可以避免将请求的发送者与接收者耦合在一起,让多个对象都有处理请求的机会将这个对象连成一条…

Qt拖拽事件简单实现

1.相关说明 重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数)&#xff0c;可以将本地图片拖拽到label标签中 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QDragEnterEvent>…