基于TCP/IP和UDP协议的socket编程结构解析

2023-05-16

1.套接字(socket)

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭).说白了Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

随着Unix的应用推广,套接字有被引进了windows等操作系统。套接字通常只与同一区域的套接字交换数据,windows socket只支持一个通信区域:网际域(AF_INET),这个域被使用忘记协议簇的通信进程使用。


2.socket通信模型




3.基于TCP/IP协议传输的数据的分解封装



4.客户机/服务器模式

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式*(client/server),即客户像服务其提出请求,服务器接受到请求后,提供相应的服务。

服务器:

(1)首先服务器方要先启动,打开一个通信通道并告知本机,它愿意在某一地址和端口上接收客户请求

(2)等待客户请求到达该端口

(3)接收服务请求,处理该客户请求,服务完成后,关闭此新进程与客户的通信链路,并终止

(4)返回第二步,等待另一个客户请求

(5)关闭服务器

客户方:

(1)打开一个通信通道,并连接到服务器所在的主机特定的端口

(2)向服务器发送请求,等待并接收应答,继续提出请求

(3)请求结束后关闭通信信道并终止


5.套接字socket的类型

(1)流式套接字(SOCK_STREAM)

提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收(TCP协议)

(2)数据报式套接字(SOCK_DGRAM)

提供无连接服务,数据包以独立包形式发送,不提供无措保证,数据可能丢失,并且接收顺序混乱(UDP协议)

(3)原始套接字(SOCK_RAM)


6.基于TCP(面向连接)的socket编程


服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。


7.基于UDP(面向无连接)的socket编程


服务器先创建socket,将socket绑定(bind)一个本地地址和端口上,等待数据传输(recvfrom)。这个时候如果有个客户端创建socket,并且向服务器发送数据(sendto),服务器就建立了连接,实现了数据的通信,连接结束后关闭连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于TCP/IP和UDP协议的socket编程结构解析 的相关文章

随机推荐

  • 关于视觉SLAM十四讲sophus库安装报错

    Sophus安装 xff1a git clone https github com strasdat sophus git cd sophus mkdir build cmake make 这时候系统报错 error lvalue requ
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)

    最近一些人问我怎么在BPU上部署yolov5 xff0c 因为之前的博客 BPU部署教程 一文带你轻松走出模型部署新手村介绍的网络都是基于Caffe的 xff0c 自己的网络都是基于pytorch的 xff0c 所以遇到了很多坑 鉴于这些需
  • 在旭日X3派开发板上使用USB Wifi来提高网络速度

    对于我来说 xff0c 开发板自带的wifi模块速度不是很满意 xff0c 下载或者传文件啥的最多也就2M s 而且 xff0c 在之前测评博客 首发 多方位玩转 地平线新发布AIoT开发板 旭日X3派 Sunrise x3 Pi 插电 x
  • 体验极速——在旭日X3派上使用双频1300M USB无线网卡

    上一篇博客 在旭日X3派开发板上使用USB Wifi来提高网络速度 提供一种低成本 xffe5 20的USB Wifi解决方案 这个模块的传输速度在10M s以内 xff0c 尽管满足正常的开发需求 xff0c 但在项目应用时 xff0c
  • linux深度学习服务器搭建——CUDA与cuDNN的选择与安装

    前言 本文章参考实验室师妹的文章Ubuntu14 04 43 CUDA8 0 43 Opencv3 1 43 Anaconda2 43 Caffe安装 xff0c 最近安装最新版时候遇到不少坑 xff0c 下面就介绍下如何去安装CUDA和c
  • 卷积神经网络处理Cifar-10分类数据集

    Cifar 10分类数据集 Cifar 10分类数据集简介 CIFAR 10数据集由10个类的60000个32x32彩色图像组成 xff0c 每个类有6000个图像 有50000个训练图像和10000个测试图像 数据集分为五个训练批次和一个
  • STM32和ROS串口通信常见问题汇总答疑

    STM32和ROS串口通信常见问题汇总答疑 大家好 我是白茶清欢 最近看了博客文章 stm32和ros的串口通信 有很多问题的评论 这里汇总回复一下 问题1 运行时报错如下 rosrun topic example publish node
  • 无人机导航中常见的坐标系

    无人机导航中常见的坐标系包括 xff1a 地球中心坐标系 ECEF EarthCenteredEarthFixedCoordinateSystem xff0c ECEF WGS 84大地坐标系 WorldGeodeticCoordinate
  • DEVC++(1)单文件实现重载运算符的十六进制数类

    本文运用DEVC 43 43 软件 xff0c 通过C 43 43 类的定义和重载运算符来实现十六进制数类的运算操作 xff0c 代码以单文件的方式来构建 题目描述如下 xff1a 设计1 4位的无符号十六进制数据类class HEX 可以
  • Jetson Nano – UART

    There is a UART on the J41 GPIO Header of the NVIDIA Jetson Nano Developer Kit Useful when you need a little bit of extr
  • 关于thinkbook14+以及16+安装ubuntu22.04 LTS后WIFI问题

    首先 xff0c 介绍一下电脑配置 购买的是2022款Thinkbook14 43 R7 6800H锐龙核显版 Intel的也一样可以用 1 设置bios 点击开机键后疯狂按F1打开BIOS xff0c 将security boot设置为d
  • RTC可调节时钟

    此代码只可显示小时 分钟 xff0c 大家可以参考并写出秒甚至年月日的相关操作代码 rtc h ifndef RTC H define RTC H 时间结构体 typedef struct vu8 hour vu8 min vu8 sec
  • C语言中关于float、double、long double精度及数值范围理解

    转自 xff1a http blog sina com cn s blog 6ebd49350101gdgo html IEEE754 浮点数的表示方法 C 语言里对 float 类型数据的表示范围为 3 4 10 38 xff5e 43
  • 移动机器人系列----->前言

    移动机器人系列 gt 前言 准备开始写移动机器人相关的文章 初步的想法是做一个能够实现室内自主定位导航的移动机器人 xff0c 通过写这一系列的文章来记录和探讨学习过程中的问题 xff08 这是一篇立flag的文章 xff0c 希望不会立马
  • 移动机器人系列----->框架开篇

    移动机器人系列 gt 框架开篇 1 xff1a 框架浅聊 这次项目的重点是实现移动机器人的定位建图以及路径规划算法 xff0c 底盘硬件部分不过多的进行展开 下图是项目简单的硬件框架示意图 xff08 1 xff09 为节约时间 xff0c
  • 移动机器人系列----->树莓派4B测试ORB-SLAM2

    移动机器人系列 gt 树莓派4B运行测试ORB SLAM2 注 测试平台为树莓派4B xff08 8 43 32G xff09 1 xff1a 树莓派安装ubuntu18 04及编译ORB SLAM2 1 1 xff1a 树莓派上安装ubu
  • PX4飞控之自主返航(RTL)控制逻辑

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • MATLAB的MCC命令

    mcc函数将matlab的m文件转化为c c 43 43 文件 mcc函数命令格式 xff1a mcc option fun fun2 mexfile1 mlifile 函数作用 xff1a 将matlab程序中的fun m转化为fun c
  • STM32 | 分享自定义协议的一些典型例子

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 上次分享的 分享一个很酷的上位机软件 中 xff0
  • 基于TCP/IP和UDP协议的socket编程结构解析

    1 套接字 xff08 socket xff09 socket起源于Unix xff0c 而Unix Linux基本哲学之一就是 一切皆文件 xff0c 都可以用 打开open gt 读写write read gt 关闭close 模式来操