tcp 和udp通信

news2024/9/20 5:34:32

一.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.coloradmin.cn/o/2064319.html

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

相关文章

“肯将玉钳作双戟,一舞天下定乾坤。”记唐铎《墨龙图》之中的笔墨画意

唐铎&#xff0c;1957 年生于北京&#xff0c;国家一级美术师&#xff0c;曾先后师从于刘文西、黄申发老师&#xff0c;原名唐京鸣&#xff0c;京城人士&#xff0c;取其名&#xff0c;不鸣则已&#xff0c;一鸣惊人之意&#xff0c;学画三十余年&#xff0c;专注于齐派虾蟹&am…

算法工程师第四十四天(99. 岛屿数量 深搜 99. 岛屿数量 广搜 100.岛屿的最大面积 )

参考文献 代码随想录 一、岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包…

Android 安卓Compose软键盘和Activity页面的协调处理问题

文章目录 问题展示1、输入框展示不完整&#xff0c;且布局被顶出屏幕外2、输入框被软键盘完全覆盖 解决方案最终演示 问题展示 1、输入框展示不完整&#xff0c;且布局被顶出屏幕外 这是默认处理的样式 2、输入框被软键盘完全覆盖 当在AndroidManifest.xml Activity标签上加…

天龙八部万象归一第8版单机安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设&#xff1a;天龙八部万象归一第8版。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;绝对…

火影忍者2——漩涡鸣人(仙人模式)篇

老规矩&#xff0c;谈火影~ 火影忍者 之—— 漩涡鸣人&#xff08;仙人模式&#xff09;篇 众所周知&#xff0c;鸣仙是一个早期的A忍&#xff0c;技能破坏力贼大&#xff0c;一般遇到鸣仙&#xff08;除非我用了青水神卡&#xff09;我是直接退的 普攻 一技能 螺旋丸 普…

深信服应届生客户经理面试经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

如何使用mmdetection训练实例分割模型?

安装 anoconda 从官方网站下载并安装。 配置环境 conda create --name openmmlab python3.8 -y conda activate mmdet 安装 PyTorch 注意&#xff1a;这个步骤很关键&#xff0c;否则后面会出问题。一定要确保自己电脑当前安装和配置的cuda版本。 使用命令&#xff1a;nvcc …

3.1 I-pipe四行启动代码

Interrupt Pipeline系列文章大纲-CSDN博客 I-pipe的启动代码位于init/main.c: start_kernel函数中。可以看到代码提交是集中在patch: genirq: add generic I-pipe core (8f933b57) 提交 xenomai / ipipe-arm64 GitLab (denx.de)&#xff0c;主要是四行&#xff1a; &#x…

stm32—SPI

1. SPI SPI (Serial Peripheral Interface)&#xff1a;是由美国摩托罗拉公司(Motorala)最先推出的一种同步全双工串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口 SPI 接口主要应用在 EEPROM&#xff0c;FLASH&#xff0c;实时时钟&#xff0c; AD转换器&#xf…

ORM底层的原理

2.3.面试题3&#xff1a;请介绍什么是ORM思想&#xff1a; a.什么是ORM&#xff1a; 1.所谓的ORM是Dao层的一种思想&#xff0c;意思就是对象关系映射&#xff08;英语&#xff1a;Object Relational Mapping&#xff0c;简称ORM&#xff0c;或O/RM&#xff0c;或O/R mapping…

【回文数判断】输入一个5位数,判断它是不是回文数

输入一个5位数&#xff0c;判断它是不是回文数。例如12321是回文数&#xff0c;个位和万位相同&#xff0c;十位与千位相同 使用C语言实现&#xff0c;具体代码&#xff1a; #include<stdio.h>int main(){int a,b,c,d,x;printf("输入一个5位数&#xff1a;")…

ACCESS 注入实战

简介 Access数据库注入攻击是一种常见的网络安全&#xff0c;通过注入SQL代码来获取未授权的数据访问权限。这种攻击利用了应用程序与数据库之间的交互漏洞&#xff0c;攻击者通过输入特定的SQL代码片段来操纵数据库查询&#xff0c;从而绕过应用程序的安全机制&#xff0c;获取…

中移动集团SRE人员能力提升培训圆满结课

前言&#xff1a; ​在数字化转型的浪潮中&#xff0c;中移动作为通信行业的领军企业&#xff0c;面临着日益复杂的运维挑战。SRE&#xff08;Site Reliability Engineering&#xff09;作为一种新兴的运维理念&#xff0c;为中移动提供了解决这些问题的新思路。2024年7月下旬…

OpenCV几何图像变换(7)重映射函数 remap()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 应用一个通用的几何变换到图像上。 remap 函数使用指定的地图对源图像进行变换&#xff1a; dst ( x , y ) src ( m a p x ( x , y ) , m a p …

VulnStack2-主机不出网-黄金票据-SID History

网络结构 kali192.168.20.145DC10.10.10.10PC192.168.20.201/10.10.10.201WEB192.168.20.80/10.10.10.80 WEB登录时&#xff0c;切到V1.3快照 且不登录默认用户 开启weblogic服务 漏洞利用 访问Weblogic默认的console路由http://192.168.20.80:7001/console 直接用工具打一…

深信服研发面试经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

新手友好:易于上手的10款项目管理工具推荐

国内外主流的 10 款轻量级项目管理软件对比&#xff1a;PingCode、Worktile、Coding、致远OA、Gitee、Wrike、ClickUp、Notion、Airtable、Basecamp。 在快节奏的工作环境中&#xff0c;有效的项目管理是成功的关键&#xff0c;尤其是对于资源有限的小型团队和初创公司而言。轻…

golang实现一个简单的rpc框架

前言 RPC在分布式系统中经常使用&#xff0c;这里写一个简单的demo实践一下。 code 先生成 go.mod 文件 go mod init rpc-try01定义方法 package model// Args 是 RPC 方法的参数结构体 type Args struct {A, B int }// Arith 定义了一个简单的算术服务 type Arith struct{…

解锁 Vue 3 Teleport 的魔力

偶然遇到一个场景&#xff0c;在项目开发中蒙层是很常见的一个组件&#xff0c;我们期望它会在 body 下显示&#xff0c;但有时候代码逻辑结构很合理&#xff0c;组件结构不是很合理&#xff0c;也就是说蒙层组件不在 body 下&#xff0c;比如说&#xff1a; 蒙层组件 <te…

初识网络--网络基础概念

目录 1 网络的发展 2 协议 ​编辑 3 网络传输的流程 局域网 跨网络通信 1 网络的发展 计算机是被人设计出来&#xff0c;为人提供计算服务的&#xff0c;而人是需要协作的&#xff0c;那么就注定计算机之间也必须要协作&#xff0c;计算机之间的协作就是靠互通数据来完成…