tcp 和udp通信

一.recvfrom
recvfrom函数是一个系统调用,用于从套接字接收数据。该函数通常与无连接的数据报服务(如 UDP)一起使用,但也可以与其他类型的套接字使用。与简单的 recv() 函数不同,recvfrom() 可以返回数据来源的地址信息。

函数原型为:

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                 struct sockaddr *src_addr, socklen_t *addrlen);


参数解释:

sockfd:一个已打开的套接字的描述符。

buf:一个指针,指向用于存放接收到的数据的缓冲区。

len:缓冲区的大小(以字节为单位)。

flags:控制接收行为的标志。通常可以设置为0,但以下是一些可用的标志:

MSG_WAITALL:尝试接收全部请求的数据。函数可能会阻塞,直到收到所有数据。
MSG_PEEK:查看即将接收的数据,但不从套接字缓冲区中删除它【1】。
其他一些标志还可以影响函数的行为,但在大多数常规应用中很少使用。
src_addr:一个指针,指向一个 sockaddr 结构,用于保存发送数据的源地址。

addrlen:一个值-结果参数。开始时,它应该设置为 src_addr 缓冲区的大小。当 recvfrom() 返回时,该值会被修改为实际地址的长度(以字节为单位)。

返回值:

在成功的情况下,recvfrom() 返回接收到的字节数。
如果没有数据可读或套接字已经关闭,那么返回值为0。
出错时,返回 -1,并设置全局变量 errno 以指示错误类型。

二.bind  

       int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
  
2、int bind(int sockfd, struct sockaddr *my_addr, 
             socklen_t addrlen);
功能:如果该函数在服务器端调用,则表示将参数1相关
      的文件描述符文件与参数2 指定的接口地址关联,
      用于从该接口接受数据。

      如果该函数在客户端调用,则表示要将数据从
      参数1所在的描述符中取出并从参数2所在的接口
      设备上发送出去。

      注意:
        如果是客户端,则该函数可以省略,由默认
            接口发送数据。
参数:
      sockfd 之前通过socket函数创建的文件描述符,套接字id
      my_addr 是物理接口的结构体指针。表示该接口的信息。

      struct sockaddr      通用地址结构 --- ip + 端口 
      {
          u_short sa_family;  地址族
          char sa_data[14];   地址信息
      };
 

三.tcp

基于tcp:

tcp 客户端:
//1.建立连接
socket        //买了一部手机 
bind //可选   //插上sim卡 
connect       //拨打电话 
....
//2.通信过程 
read 
write 
close 

tcp服务器:
//1.建立连接 
socket  //买了一部手机 
bind    //插上sim卡 
listen  //监听 客户端的连接请求 
accept  //接听 ---这一步完成之后 连接就建立好了,之后就可以收发数据  
..... 
//2.通信过程 
read 
write 
close 
 

四。tcp如何建立链接

tcp三次握手  

客户端                        服务器 
     -----我要和你建立连接--->
     <----好的,可以建立连接--
     -----好 ----------------> 
     
     
断开连接 
    tcp 四次回收 
客户端                        服务器 
     -----我要和你断开连接--->
     <----好的,可以断开------
     <----我也要断开----------
     -----好 ----------------> 
 tcp 客户端:
//1.建立连接
socket        //买了一部手机 
bind //可选   //插上sim卡 
connect       //拨打电话     
     

五.connect    


int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
//拨打电话 --- 知道对方的号码 
功能:该函数固定有客户端使用,表示从当前主机向目标
            主机发起链接请求。
   参数:sockfd 本地socket创建的套接子id
            addr 远程目标主机的地址信息。
         addrlen: 参数2的长度。
   返回值:成功 0
              失败 -1;
六.listen

int listen(int sockfd, int backlog)

功能:反应监听那个套接字并且建立成功之后返回一个新的套接字

参数:当前的套接字同时可以监听的个数

返回值 正确 返回建立的新的套接字    错误 返回 -1 

listen原理:

 

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

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

相关文章

秋招力扣Hot100刷题总结——回溯

回溯问题通常应用于解决排列组合等问题&#xff0c;需要注意的是回溯函数中的参数、结束条件、遍历开始顺序等。 回溯三部曲&#xff1a; &#xff08;1&#xff09;确定递归函数的参数。 &#xff08;2&#xff09;确定递归函数的终止条件。 &#xff08;3&#xff09;确定单层…

SQL进阶技巧:最近有效的缺失值填充问题【last_value实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 场景:现在有一张商品入库表,包括商品id、商品成本和入库日期3个字段,由于某些原因,导致部分商品的成本缺失(为0或者没有值都是缺失),这样不利于我们计算成本。所以现在要把缺失的商品进价补充完整,补充的…

Hive3:常用查询语句整理

一、数据准备 建库 CREATE DATABASE itheima; USE itheima;订单表元数据 1 1000000 100058 6 -1 509.52 0.00 28155.40 499.33 0 0 lisi shanghai 157 2019-06-22 17:28:15 2019-06-22 17:28:15 1 2 5000000 100061 72 -1 503.86 0.00 38548.00 503.86 1 0 zhangsan shangha…

如何让虚拟机识别到宿主机的USB设备

我的实验环境&#xff1a; Windows宿主机VirtualBox虚拟化软件一个Linux虚机一个8G的USB磁盘 首先要让虚拟机能看到宿主机的USB设备&#xff0c;这是在VirtualBox中设置的。 选中虚机&#xff0c;右键选择“设置”菜单&#xff0c;再单击“USB设备”&#xff1a; 选中“启用…

白卡无法注册TDSCDMA问题分析

1、问题描述 MTK平台 实验室白卡测试TDSCDMA&#xff0c;默认无法注册。使用移动卡测试&#xff0c;无此问题。 2、问题分析 查看Radio log&#xff0c;Radio中反复下发EFUN去开关飞行模式。 39191: 08-14 22:45:57.159210 1469 1512 D RmcWp : [0] ECSRA info E…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 安装Jenkins在kubernetes中部署jenkins创建名称空间创建pv,上传pv.yaml创建pvc创建一个sa账号通过deployment部署jenkins更新资源清单文件把jenkins前端加上service&#xff0c;提供外部网络访问 配置Jenkins获取…

数学建模学习(116):全面解析梯度下降算法及其在机器学习中的应用与优化

文章目录 1.梯度下降简介1.1 梯度下降的数学原理1.2 学习率的选择2 梯度下降变体3.梯度下降优化器3.1 动量法(Momentum)3.2 AdaGrad3.3 RMSprop3.4 Adam3.5 Python 使用不同优化器训练线性回归模型4.案例:使用梯度下降优化加利福尼亚房价预测模型4.1. 数据准备4.2. 模型训练…

功能测试和性能测试区别简析,软件测试公司如何开展有效测试?

软件功能测试旨在验证软件是否按照需求和设计规范正常运行&#xff0c;软件性能测试则是用来评估软件在特定负载条件下的行为和响应时间&#xff0c;确保软件在高并发和高需求的环境中能够稳定运行。 虽然两者都属于软件测试的重要组成部分&#xff0c;但它们的目的和重点却有…

【经典算法】BFS_最短路问题

目录 1. 最短路问题介绍2. 算法原理和代码实现(含题目链接)1926.迷宫中离入口最近的出口433.最小基因变化127.单词接龙675.为高尔夫比赛砍树 3. 算法总结 1. 最短路问题介绍 最短路径问题是图论中的一类十分重要的问题。本篇文章只介绍边权为1(或边权相同)的最简单的最短路径问…

手机谷歌浏览器怎么用

谷歌浏览器不仅在PC端受欢迎&#xff0c;在移动端也是广泛应用的。为了帮助大家更好的理解和使用手机谷歌浏览器&#xff0c;本文将详细介绍如何使用手机谷歌浏览器&#xff0c;对这款浏览器感到陌生的话就快快学起来吧。&#xff08;本文由https://chrome.cmrrs.com/站点的作者…

会声会影剪辑视频收费吗,会声会影最新破解版

会声会影2024&#xff1a;引领视频创作新时代的创新之旅** 在数字时代的浪潮中&#xff0c;视频创作已成为连接世界、表达创意的重要方式。随着技术的不断进步&#xff0c;一款名为“会声会影2024”的视频编辑软件横空出世&#xff0c;它不仅继承了前代产品的优秀传统&#xf…

如何在VMwareWorkstation上安装的ESXi系统扩容存储

在做ESXi的相关实验的时候&#xff0c;需要扩容ESXi的存储&#xff0c;那么如何进行操作呢&#xff1f; 扩容VMwareWorkstation上虚拟机的存储 首先我们需要先扩容虚拟机上的存储&#xff08;可不关闭虚拟机&#xff09;按照图下所示&#xff0c;右键虚拟机&#xff0c;点击设…

银行总分支文件分发系统:在安全与效率之间找到平衡

银行的组织结构通常根据其规模、业务范围和地域分布而有所不同&#xff0c;但一般会包括以下几个层级&#xff1a;总行-区域总部或分行-分行-支行-业务中心或服务中心-国际分支机构-附属机构或子公司。 在日常中&#xff0c;存在总分支文件分发的业务场景&#xff0c;文件类型通…

最方便的MODIS数据下载

这篇文章给出现在最方便的MODIS数据下载方法。 传统的方式通过访问NASA的数据中心&#xff1a;https://ladsweb.modaps.eosdis.nasa.gov/ 具体方法可以参考我前面的一篇文章&#xff1a;https://blog.csdn.net/qq_39085138/article/details/116302600 但是可以发现如果想要处理…

代码随想录算法训练营第二十二天(回溯 一)

开始学习回溯&#xff01; 回溯理论基础 代码随想录文章链接:代码随想录 文章摘要: 什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 在二叉树系列中&#xff0c;我们已经不止一次&#xff0c;提到了回溯。 回溯是递归的副产品&#xff0c;只…

屏幕翻译器下载哪个?语言达人必备这些

想象一下&#xff0c;你站在人头攒动的12分钟洛杉矶沙滩音乐节现场&#xff0c;四周是来自世界各地的音乐爱好者&#xff0c;他们带着各自的文化与热情&#xff0c;用不同的语言欢呼、交谈。 舞台上&#xff0c;乐队正激情演奏&#xff0c;旋律激荡人心&#xff0c;但偶尔传来…

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…

AI赋能软件测试:从自动化到智能化,让测试工作事半功倍

引言 在当今这个日新月异的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;正以不可阻挡之势渗透并重塑着各行各业&#xff0c;其中&#xff0c;软件开发与测试领域更是迎来了前所未有的变革。随着软件系统的复杂性日益增加&#xff0c;用户对软件质量、性能及安全性的…

SQL每日一练-0816

今日SQL题&#xff1a;计算每个项目的年度收入增长率 难度系数&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 计算每个项目每年的收入总额&#xff0c;并计算项目收入环比增长率。找出每年收入增长率最高的项目。输出结果显示年份、项目ID、项目名称、项…