• 网络编程--高并发服务器(二)


    线程池高并发服务器

    UDP服务器

    TCP与UDP机制的对比

    在这里插入图片描述
    TCP是面向连接的,可靠的数据包传输,也就是他会在复杂的网络环境中,在通信两端建立起连接,可以弥补网络层的不稳定,如果传输过程中丢包,那么会重新传递丢掉的包(主要依赖于ACK应答实现)

    而UDP没有连接,且使用不可靠的数据报传递数据,类似于发电报的形式,他的每次数据传输路径都是随机的,且他并不负责查看是否数据被对方收到,我知道了你的地址,我只负责向目标地址发过去,具体收没收到,并不理会

    TCP与UDP优缺点比较

    在这里插入图片描述
    TCP稳定性强,但是效率慢,开销大。主要应用于大数据传输、文件传输
    UDP稳定性差,但是效率快,开销小。主要应用于游戏、视频会议、视频电话
    但是,对于一些大厂,他会在利用UDP效率高的基础上,在应用层加入数据校验协议,弥补UDP的不稳定性等不足,相当于自己封装了协议

    而针对于稳定性的原因:
    TCP在网络中,在一个一个的路由节点网中,一旦建立了AB两端的连接,那么接下来所有的数据,都会按照既定顺序在该路线进行传输,所以,稳定性强,且数据的到达顺序是可预见的(因为只有一条线,谁先发送谁就会先到达):
    在这里插入图片描述
    而UDP:
    他不会建立连接,他只知道B端的地址,所以会以随机的路径进行传输,那么第一个是路径随机,稳定性会无法保证,更重要的是,因为每次数据传输的路径随机,可能第二个发送的数据,他的路径要比第三个发送的数据的路径复杂,也就出现了第三个发送的数据会比第二个发送的数据更早到达目的地,所以,有顺序会被打乱的可能性:
    在这里插入图片描述

    UDP的C/S模型实现思路

    模型分析

    在这里插入图片描述

    实现思路(对照TCP的C/S模型)

    在这里插入图片描述
    首先,由于UDP并不进行三次握手,所以,服务端的accept()、客户端的connect()函数都被舍弃
    所以,对于server端来说:
    首先还是要创建一个socket套接字,只不过这里的第二个参数传入SOCK_DGRAM,表示报式协议,且第三个参数还是传入0,表示默认的报式协议,即UDP
    之后bind(),绑定地址结构
    listen(),本来的功能是设置于服务端同时进行三次握手的最大客户端数量,但是UDP并不进行三次握手,所以,该函数也被舍弃
    之后进入while循环,在循环内,无需做任何连接相关的操作,所以我们可以直接进行数据的读写,但是这里read、write函数都无法使用了,因为我们没有connfd,且recv、send函数也不能用,因为他们只能用于TCP,所以,这里read被替换成recvfrom函数,之后进行业务代码,最后将结过通过sendto函数写回。
    最后关闭
    然后来看client端:
    首先在客户端需要创建一个客户端的socket,这里命名有些不妥,可以命名为clientfd,之后无需connect函数了,直接进行数据的读写即可,直接sendto,向服务端发送数据,然后revfrom接收服务端处理完之后的数据,最后写到屏幕,然后关闭客户端套接字

    recvfrom函数、sendto函数

    在这里插入图片描述
    在这里插入图片描述

    一级目录

    二级目录

    二级目录

    二级目录

    一级目录

    二级目录

    二级目录

    二级目录

    一级目录

    二级目录

    二级目录

    二级目录

  • 相关阅读:
    在 JavaScript 中实现删除前弹出对话框确认删除
    用Python操作PPT的办公自动化教程
    Databend 开源周报第 134 期
    【小程序源码】二维码DIY背景美化生成器
    从零学习开发一个RISC-V操作系统(二)丨GCC编译器和ELF格式
    学会使用set和map的基本接口
    docker安装
    快速实现本地数据备份与FTP远程数据迁移
    MySQL的UPDATE及SELECT...FOR UPDATE语句关于锁的一些简单验证
    vscode - vscode中使用svn插件进行提交代码
  • 原文地址:https://blog.csdn.net/qq_74098099/article/details/137131545