linux socket udp编程_linux网络编程socket

2022-10-04 20:13:01 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

文章目录

  • 前言
  • 一、UDP是什么
  • 二、UDP 数据报服务特点
  • 二、UDP 编程流程
    • 1.服务器
    • 2.客户端
    • 3.输出结果
  • 总结

前言

浅谈UDP。

提示:以下是本篇文章正文内容,下面案例可供参考

一、UDP是什么

UDP是一种不可靠的、无连接的、数据报服务。

二、UDP 数据报服务特点

发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。

因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。

二、UDP 编程流程

1.服务器

代码如下(示例):

代码语言:javascript复制
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=%sn",buff);
if(strncmp(buff,"end",3)==0)
{ 

break;
}
sendto(sockfd,"ok",2,0,(struck sockaddr*)&caddr,sizeof(caddr));
}
close(sockfd);
exit(0);
}

2.客户端

代码如下(示例):

代码语言:javascript复制
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("inputn");
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:%sn",buff);
}
close(sockfd);
exit(0);
}

3.输出结果

总结

UDP是一种无连接的传输方式,所以可以多个客户端同时发送。 服务器端关闭立马重启,客户端仍然可以发送数据。服务器端也可以立即收数据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196086.html原文链接:https://javaforall.cn

0 人点赞