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

网络编程之TCP协议

传输层协议:UDP和TCP的区别

UDP:用户数据报协议

1.面向数据报

2.无连接

3.不安全,不可靠(尽最大努力交付)

TCP:传输控制协议

1.面向数据流(流式套接字)

2.建立连接

3.安全可靠的传输协议

TCP的传输过程 

        三次握手:TCP建立连接时,需要进行三次握手,确保收发数据前,都已准备就绪

假设客户端和服务端通信:

1.第一次握手:客户端給服务端一个SYN

2.第二次握手:服务端给客户端一个ACK+SYN

3.第三次握手:客户端给服务端一个ACK

        四次挥手:TCP断开连接时,需要进行四次挥手,从而确保通信双方都已收发数据结束。

 TCP编程

        C/S模型:

 客户端的函数接口:

 socket():创建套接字

.socket 
      套接字:通信对象的抽象, 网络通信的端口,一个通信链的句柄。
      

   int socket(int domain, int type, int protocol);
      功能:
        创建一个用来通信的接口(文件描述符)
      参数:
        domain:通信的协议族(AF_INET:IPv4协议族)
        type:
            SOCK_DGRAM:数据报套接字    (UDP使用此类型)
            SOCK_STEAM:流式套接字    (TCP使用此类型)
            SOCK_RAW:原始套接字
        protocol:
            默认传0 按照协议的默认属性创建
      返回值:
        成功返回用来进行通信的文件描述符
        失败返回-1 

 connect()

connect
      int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
      功能:
        发送三次握手链接请求
      参数:
        sockfd:套接字文件描述符
        addr:存放目的地址空间首地址
        addrlen:目的地址长度
      返回值:
        成功返回0 
        失败返回-1 

send()

send
      ssize_t send(int sockfd, const void *buf, size_t len, int flags);
      功能:
        发送数据
      参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        len:数据长度
        flag:属性默认为0 
      返回值:
        成功返回发送字节数
        失败返回-1 

recv() 

recv
      ssize_t recv(int sockfd, void *buf, size_t len, int flags);
      功能:
        接收数据 
      参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址 
        len:最多接收数据长度 
        flags:接收属性默认为0 
      返回值:
        成功返回实际接收字节数
        失败返回-1 
        连接断开返回0 

服务端所要的函数接口 

bind() :绑定IP地址和端口号

5.bind
      int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
      功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址)
      参数:
            sockfd:套接字文件描述符 
            addr:IP地址和端口号结构体首地址
            addrlen:长度
      返回值:
            成功返回0
            失败返回-1 

listen() 

listen
      int listen(int sockfd, int backlog);
      功能:
        监听三次握手链接请求
      参数:
        sockfd:套接字文件描述符
        backlog:最多允许等待尚未处理的三次握手链接个数
      返回值:
        成功返回0 
        失败返回-1 

accept() 

.accept
       int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
       功能:
          处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
       参数:
          sockfd:套接字文件描述符
          addr:存放发送端IP地址空间首地址 
          addrlen:想要接收的IP地址的长度 
       返回值:
          成功返回新文件描述符(通信套接字)
          失败返回-1 


http://www.kler.cn/a/572914.html

相关文章:

  • 数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解
  • CHAPTER 5 Data Class Builders
  • MWC 2025 | 移远通信大模型解决方案加速落地,引领服务机器人创新变革
  • Tripo3D使用体验
  • C语言_图书管理系统_借阅系统管理
  • E22-xxxT22D lora模块配置
  • OpenFeign 学习笔记
  • 并查集—数组实现
  • 【Linux】进程间通信 续
  • 美颜SDK架构揭秘:人脸美型API的底层实现与优化策略
  • 立体仓WMS同MES制造的协同
  • upload-labs Pass5-18 文件上传
  • 观察者模式的C++实现示例
  • 从零开始的kafka学习 (一)| 概念,Java API
  • 从vue源码解析Vue.set()和this.$set()
  • 深入浅出:UniApp 从入门到精通全指南
  • 360图片搜索爬虫|批量爬取搜索图片
  • 关于在vue3中的动态组件component标签上给ref属性动态赋值的问题
  • Java进阶-SpringCloud设计模式-工厂模式的设计与详解
  • 原型链与继承