文章目录
- 前言
- 一、UDP是什么
- 二、UDP 数据报服务特点
- 二、UDP 编程流程
-
- 总结
前言
浅谈UDP。
提示:以下是本篇文章正文内容,下面案例可供参考
一、UDP是什么
UDP是一种不可靠的、无连接的、数据报服务。
二、UDP 数据报服务特点
发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ff19fc8f35a047c198f47e714480ff5f.png)
因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。
二、UDP 编程流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/bcf3980ef7064be89d079d4fd842c6d1.png)
1.服务器
代码如下(示例):
int main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert( sockfd != -1 );
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
assert( res != -1 );
while(1)
{
int len=sizeof(caddr);
char buff[128]={0};
recvfrom(sockfd,buff,127,0,(strcut sockaddr*)&caddr,&len);
printf("buff=%s\n",buff);
if(strncmp(buff,"end",3)==0)
{
break;
}
sendto(sockfd,"ok",2,0,(struck sockaddr*)&caddr,sizeof(caddr));
}
close(sockfd);
exit(0);
}
2.客户端
代码如下(示例):
int main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert( sockfd != -1 );
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
while(1)
{
char buff[128]={0};
printf("input\n");
fgets(buff,127,stdin);
if(strncmp(buff,"end",3)==0)
{
break;
}
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
memset(&buff,128,0);
int len=sizeof(saddr);
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
printf("recv:%s\n",buff);
}
close(sockfd);
exit(0);
}
3.输出结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/f26438d6d60c4f22ac1be2dc5dbcd708.png)
总结
UDP是一种无连接的传输方式,所以可以多个客户端同时发送。
服务器端关闭立马重启,客户端仍然可以发送数据。服务器端也可以立即收数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)