qt5 tcp服务器编程 多客户_编程之美:基于UDP来写服务器——客户端(附代码)...

本文介绍了UDP协议的基本概念,强调了其无连接和不可靠的特性,并通过对比TCP协议展示了UDP的简洁性。文章详细阐述了UDP服务器和客户端的结构模型,并提供了使用C语言编写UDP通信的基本思路和关键函数,如`recvfrom()`和`sendto()`。通过实例,读者可以了解如何创建和运行基于UDP的通信程序。
摘要由CSDN通过智能技术生成

在上一篇内容中,我们用TCP协议写出了客户端——服务器,由于本篇内容中要使用到之前所讲的socket、bind等知识,所以在这里也附上前篇内容的链接,大家可以更好理解。

自己动手用c语言写一个基于服务器和客户端(TCP)

今天我们来用另外一个十分重要的传输协议UDP该怎么实现这项功能。

知其然更要知其所以然,我们先来了解一下UDP协议。

UDP传输协议

UDP协议:UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。位于OSI模型中的传输层。UDP不提供数据包分组和组装,不能对数据包进行排序,换句话说,就是不能保证信息发送后能够安全到达。UDP用来支持那些需要在计算机之间传输数据的网络应用。例如网络视频,在线语音系统等等,他有以下特点:

  • 无连接: 知道对端的IP和端口号就直接进⾏行传输, 不需要建立连接;
  • 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报: 不能够灵活的控制读写数据的次数和数量

相比TCP协议,UDP要简单不少,我们来根据下图具了解一下UDP服务器——客户端的结构模型是怎样

72ee0c04ceaa613d6f063315d02495a9.png

可以和TCP模型比较,看看有什么不同

可以发现,和TCP模型相比,UDP少了监听,链接和接收步骤,这也符合他的特点,毕竟无连接而且不可靠嘛。那么如何具体编写代码呢,我们先来整理一下思路:

  • 服务器要做的事情就是:接收内容,并显示,然后发回客户端
  • 客户端要做的事情就:发送内容,再接收服务器的回显,再显示出来

这里涉及到了几个新的函数:recvfrom()和sendto

recvfrom(sockfd, buf, sizeof(buf), 0, (SA*)&cliaddr, &addrlen);//用来接收信息参数意义:sockfd:套接字描述字 buf:缓冲区 sizeof(buf):缓冲区大小 0:调用方式,默认值 (SA*)&cliaddr:指明数据从哪里接收 &addrlen:地址的长度,&取数值sendto(sockfd, buf, sizeof(buf), 0, (SA*)&srv_addr, sizeof(srv_addr))//用来发送信息参数意义同上。

下面我们来看看具体的代码应该如何编写(至于本地端口,ip绑定和bind函数的用法在链接文章中已有详细说明,此处再不赘述):

/*客户端*/#include #include #include #include #include #include #include #include typedef struct sockaddr_in SAI;//声明本地端口和地址typedef struct sockaddr SA;int main(int argc, char *argv[]){if (argc < 3){fprintf(stderr, "Usage: %s 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值