深入了解Socket套接字

embedded/2024/10/22 14:43:07/

目录

一、引入🙌

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.ppmy.cn/embedded/42802.html

相关文章

Django5+React18前后端分离开发实战13 使用React创建前端项目

先将nodejs的版本切换到18: 接着,创建项目: npx create-react-app frontend接着,使用webstorm打开这个刚创建的项目: 添加一个npm run start的配置: 通过start启动服务: 浏览器访问&…

【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略

【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略 一、脏读(Dirty Read)二、不可重复读(Non-repeatable Read)三、幻读(Phantom Read)四、总结 💖The Begi…

JVM学习-堆空间(二)

年轻代与老年代 存储在JVM中的Java对象被划分为两类 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速一类对象的生命周期很长,在某些极端情况下还能够与JVM的生命周期保持一致 Java堆区进一步细分的话,分为年轻代(YoungGen)和…

深度学习之基于Tensorflow卷积神经网络验证码识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与目标 随着互联网的快速发展,验证码作为一种有效的防止自动化攻击和用户身份验证的手段&…

Python线程

Python线程 1. 进程和线程 先来了解下进程和线程。 类比: 一个工厂,至少有一个车间,一个车间中至少有一个工人,最终是工人在工作。 一个程序,至少有一个进程,一个进程中至少有一个线程,最终…

【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)

计算机基础知识 1.中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号(INTR)以后,由中断控制器(INTC)确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地…

基于地理坐标的高阶几何编辑工具算法(5)——合并相交面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中一个面,点击“合并相交面”工具,选择其他相邻面,空格执行合并。 应用场景 用于将相邻或相交的同类型几何面进行合并,达到综合效果。 算法输入 待…

手机怎么恢复照片?2个数据恢复教程详解!

“安卓手机自带相机录的视频和拍的照片被误删了,照片没有同步到云盘或百度网盘,学习资料很重要,折腾了一天,不知道该怎么找回。有没有恢复的方法呢?求告知,谢谢大家!” 无论是珍贵的家庭瞬间、…