当前位置: 首页 > news >正文

TCP和UDP编程的学习

UDP编程特点:c/s模型

不可靠 ; 无链接 ;数据报形式(效率高);

TCP编程特点:

面向链接; 可靠传输;(保证数据准确可靠); 面向字节流;

ssize_t recvfrom(int sockfd,       socket的fd

                  void *buf,  保存数据的一块空间的地址

                             size_t len,   这块空间的大小

                              int flags,   0  默认的接收方式 --- 阻塞方式

  struct sockaddr *src_addr,    用来保存发送方的地址信息

         socklen_t *addrlen   表示发送方实际的地址信息大小

               );

返回值:

   成功 返回接收到的字节数

   失败  -1

2、int bind(int sockfd, struct sockaddr *my_addr,

             socklen_t addrlen);

功能:如果该函数在服务器端调用,则表示将参数1相关

         的文件描述符文件与参数2 指定的接口地址关联,

         用于从该接口接受数据。

         如果该函数在客户端调用,则表示要将数据从

         参数1所在的描述符中取出并从参数2所在的接口

         设备上发送出去。

注意:如果是客户端,则该函数可以省略,由默认接口发送数据。

参数:sockfd 之前通过socket函数创建的文件描述符,套接字id

         my_addr 是物理接口的结构体指针。表示该接口的信息。

绑定地址:运行所在主机上的地址;服务器程序所在的程序;

基于TCP客户——服务器程序的套接字服务:

TCP建立连接:TCP的三次握手过程;

断开链接: TCP的四次回收;

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

1、int connect(int sockfd, const struct sockaddr *addr,

                   socklen_t addrlen);

   功能:该函数固定有客户端使用,表示从当前主机向目标

             主机发起链接请求。

   参数:sockfd 本地socket创建的套接子id

          addr 远程目标主机的地址信息。

               addrlen: 参数2的长度。

   返回值:成功 0

               失败 -1;

struct sockaddr *addr //通用地址结构类型,并没有实际去用,实际用到都是具体地址结构类型

struct sockaddr_in {

               sa_family_t    sin_family; /* address family: AF_INET */

               in_port_t      sin_port;   /* port in network byte order */

               struct in_addr sin_addr;   /* internet address */

           };

           /* Internet address. */

           struct in_addr {

               uint32_t       s_addr;     /* address in network byte order */

           };

关于三次握手:

三次握手的目的就是为了确保双方的连接正常

第一次握手:客户端向服务器发送;证明客户端的发送正常;

第二次握手:服务器接收到客户端的发送,并向客户端发送;证明服务器的接收、发送能力正常;

第三次握手:客户端向服务器发送,证明客户端的接收能力正常;

关于四次挥手:

  1. 首先客户端想要释放连接,先向服务器发送;
  2. 服务器收到客户端的发送后,确认客户端想要释放连接,
  3. 服务器向客户端发送自己也要释放连接的消息;
  4. 客户端接收到服务器要释放连接的消息,向服务器发送收到的消息;

完成四次挥手;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【python】灰色预测 GM(1,1) 模型
  • Coze插件发布!PDF转Markdown功能便捷集成,打造你的专属智能体
  • 使用PCF8591实现一个串口控制电压表
  • 第三期书生大模型实战营 进阶岛第3关LMDeploy 量化部署进阶实践
  • Eclipse的使用配置教程:必要设置、创建工程及可能遇到的问题(很详细,很全面,能解决90%的问题)
  • 开发小运维-jar包服务shell启动脚本
  • 提升职业竞争力,亚马逊云科技认证助你云端腾飞
  • 第1节 安装Flask
  • LeetCode.209.长度最小的子数组
  • uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败
  • 生信分析:精准科研的幕后英雄,加速生物医学研究新进程
  • 其他自动重试的注解
  • 洛谷P1198.最大数
  • Voice agent connected!回顾一场 24 小时的黑客松
  • Cocos Creator通用关卡编辑器UniLevelEditor
  • 分享的文章《人生如棋》
  • [译]Python中的类属性与实例属性的区别
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Android 架构优化~MVP 架构改造
  • CSS魔法堂:Absolute Positioning就这个样
  • export和import的用法总结
  • Fabric架构演变之路
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Linux gpio口使用方法
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mysql外键的使用
  • Odoo domain写法及运用
  • Promise面试题,控制异步流程
  • spark本地环境的搭建到运行第一个spark程序
  • SQL 难点解决:记录的引用
  • Theano - 导数
  • Web Storage相关
  • 多线程事务回滚
  • 反思总结然后整装待发
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 说说动画卡顿的解决方案
  • 我的zsh配置, 2019最新方案
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 新手搭建网站的主要流程
  • 由插件封装引出的一丢丢思考
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • # include “ “ 和 # include < >两者的区别
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (8)STL算法之替换
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (vue)页面文件上传获取:action地址
  • (备份) esp32 GPIO
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (回溯) LeetCode 40. 组合总和II
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐