深入了解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发送和接收的数据报。

 

 

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

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

相关文章

《我的阿勒泰》读后感

暂没时间写,记录在此,防止忘记,后面补上!!! 【经典语录】 01、如果天气好的话,阳光广阔地照耀着世界,暖洋洋又懒洋洋。这样的阳光下,似乎脚下的每一株草都和我一样,也把身子完全舒展开了。 02、…

148.【Windows DOS命令脚本文件】

Window待处理脚本 (一)、批处理编程初步体验1.什么是批处理程序?(1).批处理程序的定义(2).如何编辑批处理程序 2.批处理程序可以做什么?(1).匹配规则删除文件(2).新建文件,日志等(3).创建计算机病毒等 3.一个基本的批处理文件(1).带盘符的输出…

Scala 入门介绍和环境搭建

一、简介 Scala 是一门以 Java 虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 (静态语言需要提前编译,如:Java、c、c 等,动态语言如:js)Scala 是一门多范式的编程…

海康威视硬盘录像机NVR连接公网视频监控平台,注册失败,抓包发现有403 forbidden的问题解决

目录 一、问题描述 二、问题定位 1、查看DVR的配置 2、查看需要使用的端口是否开放 3、查看日志 4、抓包 (1)找出错误 (2)查看数据包内容 三、问题分析 1、国标28181中的域的概念 2、域应该如何定义 (1&am…

嵌入式学习——3——UDP TFTP简易文件传输

tftp协议概述 简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输 特点: 是应用层协议 基于UDP协议实现 数据传输模式 octet:二进制模式(常用) mail:已经不再支持 TFTP通信…

SPI通信(STM32)

一、SPI通信 1、SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 2、四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MIS…

C语言之函数和函数库以及自己制作静态动态链接库并使用

一:函数的本质 1:C语言为什么会有函数 (1)整个程序分为多个源文件,一个文件分为多个函数,一个函数分成多个语句,这就是整个程序的组织形式。这样的组织好处在于:分化问题、、便于程序…

独享IP是原生IP吗?二者有何区别?

原生IP: 原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中…

2024年5月22日 (周三) 叶子游戏新闻

《奇星协力》Steam抢先体验开启 求生城市建造Leikir Studio工作室开发的一款求生城市建造新游《奇星协力》Steam抢先体验开启,限时九折优惠,本作支持中文,感兴趣的玩家可以关注下了。 《原神》预告4.7版本前瞻特别节目 5月24日播出5月22日&am…

韵搜坊 -- Elastic Stack快速入门

文章目录 现有问题Elastic Stack介绍(一套技术栈)安装ES安装KibanaElasticsearch概念倒排索引Mapping分词器IK分词器(ES插件)打分机制 ES的几种调用方式restful api调用(http 请求)kibana devtools客户端调…

00.OpenLayers快速开始

00OpenLayers快速开始 官方文档: 快速开始:https://openlayers.org/doc/quickstart.html 需要node环境 一、设置新项目 npm create ol-app my-app cd my-app npm start第一个命令将创建一个名为 my-app​ 的目录(如果您愿意,…

HarmonyOS鸿蒙应用开发——ArkTS的“内置组件 + 样式 + 循环和条件渲染”

一、内置组件是咩? 学过前端的都知道,一个组件就是由多个组件组成的,一个组件也可以是多个小组件组成的,组件就是一些什么导航栏、底部、按钮......啥的,但是组件分为【自定义组件】跟【内置组件】 【自定义组件】就…

Java生成Shp文件-点(Point)

Java生成Shp文件-点(Point) 生成面相关Shp: 使用Java生成shp文件-面(Polygon) 1. 使用的依赖和面相同 同上 2. 待处理的JSON数据格式 [ {"yield":"226.82","coordinates":[123.6705525,48.434689999999996],"wybm":"05011680…

C语言 变量的存储类型

今天 我们来说变量的存储类型 变量的存储类型是指系统为变量分配存储区域的方式。 决定着变量存储空间在哪里分配,和变量的生存期、作用域存在着一定联系。 动态存储 函数调用发生时系统根据函数定义的需要动态为其分配的一个栈区,函数调用结束时释放…

C# NetworkStream 流的详解与示例

文章目录 一、NetworkStream类的基本概念1.1 NetworkStream类概述1.2 NetworkStream类属性1.3 NetworkStream类方法 二、NetworkStream的连接方式三、NetworkStream的传输模式四、NetworkStream类示例服务器端代码:客户端代码: 五、总结 在C#中&#xff…

【C++算法】BFS解决单源最短路问题相关经典算法题

1.迷宫中离入口最近的出口 首先我们可以将这道题目简化一下,可以往我们这一章的主题上面来想想。 我们利层序遍历来解决最短路径问题,是最经典的做法。我们可以从起点开始层序遍历, 并组在遍历的过程中记录当前遍历的层数。这样就能在找到出口的时候&…

基于open3d对kitti数据集检测结果可视化

前言 KITTI数据集是自动驾驶和计算机视觉领域中一个广泛使用的基准数据集,它提供了丰富的传感器数据,包括激光雷达、相机和GPS等。Open3D是一个功能强大的3D数据处理和可视化库,支持多种3D数据格式。本文将介绍如何使用Open3D对KITTI数据集的…

html简述——part1

HTML概述 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言,具体指超文本标记语言。它不是一种编程语言,而是一种标记语言,用于描述网页的结构和内容。通过HTML,开发者可以定义网页的标题…

sky walking日志采集以及注意事项

文章目录 1,sky walking日志采集功能概述2,采集log4j2日志3,采集logback日志4,效果展示5,注意事项 1,sky walking日志采集功能概述 在介绍Sky walking日志采集功能之前,最好在系统学习一遍日志…

使用FP8加速PyTorch训练的两种方法总结

在PyTorch中,FP8(8-bit 浮点数)是一个较新的数据类型,用于实现高效的神经网络训练和推理。它主要被设计来降低模型运行时的内存占用,并加快计算速度,同时尽量保持训练和推理的准确性。虽然PyTorch官方在标准…