大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
前言
浅谈UDP。
提示:以下是本篇文章正文内容,下面案例可供参考
一、UDP是什么
UDP是一种不可靠的、无连接的、数据报服务。
二、UDP 数据报服务特点
发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。
因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。
二、UDP 编程流程
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.输出结果
总结
UDP是一种无连接的传输方式,所以可以多个客户端同时发送。
服务器端关闭立马重启,客户端仍然可以发送数据。服务器端也可以立即收数据。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196086.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...