深入了解Socket套接字

目录

一、引入🙌

1、概念 🎉

2、分类🎉

Socket 套接字主要针对传输层协议分为流套接字、数据报套接字、原始套接字(了解即可)三类。

1)流套接字:使用传输层TCP协议 

 2)数据报套接字:使用传输层UDP协议

补充:

1、通俗理解有连接和无连接 🪄

2、理解可靠和不可靠传输🪄

3、面向字节流和面向数据报🪄

4、理解全双工和半双工🪄

5、网络传输数据的基本单位🪄

datagram(报);packet(包);segment(段);frame(帧)

二、通信模型🙌

1、Java数据报套接字通信模型 🎉

2、UDP数据报套接字编程 🎉

DatagramSocket API

2)DatagramSocket 构造方法

3) DatagramSocket 方法

注意: 

DatagramPacket API

DatagramPacket是UDP Socket发送和接收的数据报。 

 


 

一、引入

1、概念

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

理解:写网络程序,主要编写写的应用层代码。如果要真正的发送数据,需要上层协议 调用下层协议,应用层要调用传输层提供的一组api统称为socket api。

2、分类

Socket 套接字主要针对传输层协议分为流套接字、数据报套接字、原始套接字(了解即可)三类。

1)流套接字:使用传输层TCP协议 

    对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情 况下,是无边界的数据,可以多次发送,也可以分开多次接收。 

 TCP,即Transmission Control Protocol(传输控制协议),传输层协议。

特点:

  • 有连接
  • 可靠传输
  • 面向字节流
  • 有接收缓冲区,也有发送缓冲区
  • 大小不限

 2)数据报套接字:使用传输层UDP协议

      对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如100个字节,必须一 次发送,接收也必须一次接收100个字节,而不能分100次,每次接收1个字节。 

UDP,即User Datagram Protocol(用户数据报协议),传输层协议。

特点:

  • 无连接
  • 不可靠传输
  • 面向数据报
  • 有接收缓冲区,无发送缓冲区
  • 大小受限:一次最多传输64k 

补充:

1、通俗理解有连接和无连接 

连接:可以理解成通信双方,各自记录了对方的信息。

         例如:打电话就是有连接通信,TCP协议刻意保存了对方的相关信息

             而发短信/发一个微信,UDP协议,不需要刻意保持对方的相关信息

2、理解可靠和不可靠传输

   可靠传输时尽可能的传输过去,知道自己没成功发送

   不可靠传输是消息发了就发了,不关注结果。

3、面向字节流和面向数据报

以字节为传输的基本单位,读写方式非常灵活

以一个UDP数据报为基本单位必须一次发送,一次性接收

4、理解全双工和半双工

半双工通信只能单向通信 例如:用吸管给马喂食,只能一个先吹

全双工通信:一条路径,双向通信

5、网络传输数据的基本单位
datagram(报);packet(包);segment(段);frame(帧)


 

二、通信模型

1、Java数据报套接字通信模型 

     java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用 DatagramPacket 作为发送或接收的UDP数据报

 

 以上只是一次发送端的UDP数据报发送,及接收端的数据报接收,并没有返回的数据。也就是只有请 求,没有响应。对于一个服务端来说,重要的是提供多个客户端的请求处理及响应,流程如下:

 

2、UDP数据报套接字编程 

DatagramSocket API

1)Datagram 就是“数据报”;Socket,说明这个对象是一个socket对象

socket对象:相当于对应到系统中一个特殊的文件(socket)文件 ,socket文件并非对应到硬盘上的某个数据存储区域,而是对应到网卡这个硬件设备。这个对象就是一个UDP数据报.

所以,要想进行网络通信,就需要有socket文件这样的对象,借助这个socket文件对象,就能够间接的操作网卡。

      往这个socket对象中写数据,相当于通过网卡发送消息

      从这个 socket对象中读取数据,相当于通过网卡接收消息

2)DatagramSocket 构造方法

DatagramSocket() //创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口
(一般用于客户端)
DatagramSocket(int port)//创建一个UDP数据报套接字的Socket,绑定到本机指定的端口(一般用
于服务端)

3) DatagramSocket 方法

void receive(DatagramPacket p)
//从此套接字接收数据报(如果没有接收到数据报,该方法会阻
塞等待)
void send(DatagramPacket p)
从此套接字发送数据报包(不会阻塞等待,直接发送)
void close() 关闭此数据报套接字,否则会出现文件资源泄露的问题

注意: 

  • 此处的Socket对象可能被客户端/服务器都使用
  • 服务器这边的往往要关联一个具体的端口号
  • 客户端这边则不需要手动指定 

DatagramPacket API

DatagramPacket是UDP Socket发送和接收的数据报。 

//构造方法
//构造一个DatagramPacket以用来接收数据报,接收的数据保存在
字节数组(第一个参数buf)中,接收指定长度(第二个参数
length)
DatagramPacket(byte[] buf, int length)//构造一个DatagramPacket以用来发送数据报,发送的数据为字节
数组(第一个参数buf)中,从0到指定长度(第二个参数
length)。address指定目的主机的IP和端口号
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)//方法
//从接收的数据报中,获取发送端主机IP地址;或从发送的数据报中,获取
接收端主机IP地址
InetAddress getAddress()
//从接收的数据报中,获取发送端主机的端口号;或从发送的数据报中,获
取接收端主机端口号
int getPort()byte[] getData() 获取数据报中的数据
DatagramSocket 是UDP Socket,用于发送和接收UDP数据报。
DatagramSocket 构造方法:
DatagramSocket 方法:
DatagramPacket API
DatagramPacket是UDP Socket发送和接收的数据报。

 

 

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

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

相关文章

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月25日预测第1弹

上一套算法采用了88723的容差策略,关于容差策略相信大家都比较清楚:容差可以最大限度的保证初始大底中包含中奖号码,然后再通过设置一些杀号条件进行缩水。比如,我对我的各种模型算法近30期的预测结果进行了统计,如果采…

huggingface笔记: accelerate estimate-memory 命令

探索可用于某一机器的潜在模型时,了解模型的大小以及它是否适合当前显卡的内存是一个非常复杂的问题。为了缓解这个问题,Accelerate 提供了一个 命令行命令 accelerate estimate-memory。 accelerate estimate-memory {MODEL_NAME} --library_name {LIBR…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克,高度详细 参数设置 大模型:万享XL_超写实摄影V8.2 采样器:Euler a 采样迭代步数:25 CFG:3 反向提示词&#x…

微服务可用性之隔离

摘要 ​ 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况,动静隔离、读写隔离、热点隔离、资源隔离等场景。 为什么要隔离 ​ 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用,不至于系统陷入整体性瘫痪,…

使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper 支持 Java 和 C 的API接口。本文将介绍使用 C/C 语言客户端库的编译安装和使用入门。 一、编译安装 PS:就在上一篇文章还觉得安装和配置 jdk 、maven 麻烦,所以当时选择 apache-zookeeper-[version]-bin.tar.gz 的版本。然而,本文…

Leetcode刷题笔记4

1658. 将 x 减到 0 的最小操作数 1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode) 示例 3: 输入:nums [3,2,20,1,1,3], x 10 输出:5 解释:最佳解决方案是移除后三个元素和前两个元素(总共…

【CAN】STM32新能源汽车CAN通信实现过程

【CAN】STM32新能源汽车CAN通信实现过程 文章目录 前言一、软件1.PA11、PA12口配置2.PB8、PB9口配置 二、接线图三、硬件原理图四、上位机总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 使用工具: 1.控制器——STM32F103C8T6 2.仿真器——STLINK …

Opencompass模型评测教程

模型评测 模型评测非常关键,目前主流的方法主要可以概括为主观评测和客观评测,主观评测又可以分为两种形式:人工判断或者和模型竞技场。客观评测一般采用评测数据集的形式进行模型评测。本教程使用Opencompass工具进行对Internlm2-7b模型进行…

网络模型-策略路由配置

在实际网络应用中,策略路由也是一种重要的技术手段。尽管在考试并不注重策略路由,但是实际上应用较多建议考生除了掌握基本的静态路由协议IP route-static,动态路由协议RIP、还要掌握如何配置策略路由。策略路由的基本原理:根据ACL定义的不同…

深度学习之人脸性别年龄检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着计算机视觉和深度学习技术的飞速发展,人脸性别年龄检测系统在多个领域展现出广…

SVG批量转为pdf超有效的方式!

最近在整理工作,发现ppt里面画的图智能导出svg格式无法导出pdf格式,由于在线的网站会把我的图片搞乱而且不想下载visio(会把本地的word搞坏),因此琢磨出这种批量转换的方式。 1. 下载并安装Inkscape 下载链接&#xf…

电路仿真软件:点亮教学新篇章,十大便利助力高效学习

在信息化时代的浪潮中,电路仿真软件以其独特的优势,逐渐在教学领域崭露头角。它不仅能够帮助学生更好地理解电路知识,还能提升教师的教学效果。接下来,让我们一起探讨电路仿真软件对教学带来的十大便利。 一、直观展示电路原理 电…

Keras深度学习框架第二十四讲:KerasNLP概述

1、KerasNLP简介 KerasNLP是一个与TensorFlow深度集成的库,旨在简化NLP(自然语言处理)任务的建模过程。它提供了一系列高级API,用于预处理文本数据、构建序列模型和执行常见的NLP任务,如情感分析、命名实体识别和机器…

风控指南:国内车险欺诈呈现四大趋势

目录 车险欺诈呈现内外勾结的团伙化 防范车险欺诈需要多重合作 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 2024年4月11日,国家金融监督管理总局官网发布国家金融监督管理总局关于《反保险欺诈工作办法(征求意见稿)》公开征求意见…

PCL平面多边形可视化

1、背景介绍 多边形是一个在二维平面上由直线段(称为边或侧)首尾顺次连接围成的封闭图形。这些直线段也称为多边形的边,而它们的交点称为多边形的顶点或角。在点云边缘点提取后,有时候需要将其进行可视化,如下图所示。…

【Mac】跑猫RunCat for mac(菜单栏Cpu可视化监测工具) v10.3免费版安装教程

软件介绍 RunCat是一款为菜单栏提供关键帧动画的软件。动画速度会根据Mac的CPU使用情况而变化。奔跑的小猫通过运行速度告诉您Mac的CPU使用率。 这是一款好玩的软件,可以为您的Mac使用添加一点小确幸。感兴趣的朋友可以试试哦。 安装步骤 1.打开安装包&#xff0…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区(贵阳花溪)。 学院现有教职工139人,其中专职教师126人,教授17人,副教授37人,讲师46人,高级实验师4人,实验师17人。具有博士学位的…

Django 入门教程

1. Django简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 MVC 与 MVT 模型 MVC 模型 MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型&am…

图论(三)(最小生成树)

一、图的表示(简要概述) 对于图G(V,E)( V 为节点的集合,E 为边的集合 V*V 的子集)有两种表示方法:邻接链表和邻接矩阵,两种表示方法既可以表示有向图&#x…

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…