当前位置: 首页 > news >正文

免费建站网站群辽宁天一建设有限责任公司网站

免费建站网站群,辽宁天一建设有限责任公司网站,自动seo网站源码,大型网站建设制作公司文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下#xff1a; socket()用来创建套接字#xff0c;使用 udp 协议时#xff0c;选择数据报服务 SOC… 文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下 socket()用来创建套接字使用 udp 协议时选择数据报服务 SOCK_DGRAM。sendto()用来发送数据由于 UDP 是无连接的每次发送数据都需要指定对端的地址IP 和端口。recvfrom()接收数据每次都需要传给该方法一个地址结构来存放发送端的地址。recvfrom()可以接收所有客户端发送给当前应用程序的数据并不是只能接收某一个客户端的数据。 服务器端代码ser.c如下 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includesys/socket.h #includenetinet/in.h #includearpa/inet.hint main() { //1.创建套接字int sockfdsocket(AF_INET,SOCK_DGRAM,0);if(sockfd-1){printf(创建失败);exit(1);}struct sockaddr_in saddr,caddr;memset(saddr,0,sizeof(saddr));saddr.sin_familyAF_INET;saddr.sin_porthtons(6000);saddr.sin_addr.s_addrinet_addr(127.0.0.1);//2.指定套接字的地址绑定ip和端口int resbind(sockfd,(struct sockaddr*)saddr,sizeof(saddr));if(res-1){printf(绑定失败);exit(1);}int lensizeof(caddr);while(1){char buff[128]{0};//3.接收客户端的消息,谁发来数据就接收谁的数据并没有和任何客户端建立连接recvfrom(sockfd,buff,127,0,(struct sockaddr*)caddr,len);//客户端的信息(ip和端口)存放到caddr,caddr指定数据的来源中记录着是谁发的数据printf(buff(%d)%s\n,ntohs(caddr.sin_port),buff);//4.向客户端回复数据sendto(sockfd,ok,2,0,(struct sockaddr*)caddr,sizeof(caddr));} }客户端代码cli.c如下 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includesys/socket.h #includenetinet/in.h #includearpa/inet.hint main() {//1.创建套接字int sockfdsocket(AF_INET,SOCK_DGRAM,0);if(sockfd-1){printf(创建失败);exit(1);}struct sockaddr_in saddr;//服务器的地址ip和端口memset(saddr,0,sizeof(saddr));saddr.sin_familyAF_INET;saddr.sin_porthtons(6000);saddr.sin_addr.s_addrinet_addr(127.0.0.1);int len sizeof(saddr);while(1){char buff[128]{0};printf(输入数据);fgets(buff,128,stdin);if(strncmp(buff,end,3)0){break;}//2.向服务器端发送数据sendto(sockfd,buff,sizeof(buff),0,(struct sockaddr*)saddr,sizeof(saddr));memset(buff,0,sizeof(buff));//3.接收服务器端回复的数据recvfrom(sockfd,buff,127,0,(struct sockaddr*)saddr,len);printf(buff%s\n,buff);}//4.关闭套接字close(sockfd);}运行结果 从结果可以看出当服务器端启动之后可以同时启动多个客户端与客户端通信但是两个客户端的端口号是不同的。 UDP协议无连接的特点 将服务器端关闭再重启后客户端依旧可以与服务器端通信如下图所示 这是因为服务器端和客户端是没有建立连接的当服务器端启动之后收的到底是哪个客户端的消息我们并不知道哪个客户端发消息服务器端就收哪个客户端发来的消息。当服务器端关闭之后是不会像TCP编程那样有底层的协议去进行四次挥手通知客户端它要关闭的客户端不会收到任何信息并且不知道服务器端是否关闭所以当我们服务器端关闭之后再重新启动不会影响客户端向服务器端发送数据。同理客户端关闭也不会给服务器端发送任何信息客户端的关闭也不会影响服务器端。 如果服务器端关闭后客户端向服务器端发送数据就会发生阻塞阻塞在客户端的recvfrom这个地方因为服务器没启动端口没有人使用那么数据就会被丢掉所以没有服务器端给客户端回复数据所以就会阻塞在recvfrom这个地方。如下图 此时客户端代码cli.c执行完了sendto接下来执行recvfrom的时候就被阻塞住了因为没有服务器端给客户端回复消息此时发送的aaaaaa发给本主机的6000端口但是本主机的6000端口没有被占用也就是6000端口没有被使用所以所发送的数据aaaaaa就直接被丢掉了所以也不会有服务器端给客户端回复消息客户端就会在recvfrom这个地方阻塞住。 UDP协议数据报的特点 将服务器端代码ser.c中的recvfrom那一行的代码修改为如下情况让服务器端一次只收一个字符 recvfrom(sockfd,buff,1,0,(struct sockaddr*)caddr,len);此时的运行结果 出现这样的结果是因为第一次客户端所发送的hello服务器端只收到了一个字符h剩下的ello被丢掉了后续的结果也是一样这是因为UDP协议是数据报服务不像流式服务一样没有读完会继续读每次recvfrom就拆一个包拆一个包要保证把所有的数据都读走不然剩余的数据就会被丢掉。所以在使用UDP协议的时候必须要保证一次把数据接收完。不用担心两个包合到一起导致收不完数据因为每次调sendto的时候都要指定对方的地址这个地址可以一样也可以不一样所以两个sendto不可能合到一起因为sendto的目的端可以不一样。不像TCP协议send一下再send一下两次send的内容都会放到同一个缓冲区中UDP协议是sendto直接打一个包过去不会出现粘包的现象。数据报服务的特点如下图所示
http://www.sadfv.cn/news/128304/

相关文章:

  • 建设工程消防设计备案哪个网站《新闻联播》 今天
  • 优秀国内个人网站企业信息管理平台
  • 金山区网站建设建网站html5
  • 直接找高校研究生做网站行吗网店美工设计的四大要点
  • xyz域名注册局官方网站荣耀手机官网入口
  • 网站 dns 解析贵阳网站设计哪家好
  • 哪个网站做美食视频软件制作网站首页psd
  • 制作网站账号系统美食网页设计素材图片
  • 手机端网站界面如何做湛江网站建设的详细过程
  • 网站推广途径和要点建一个类似京东的网站
  • 音乐主题的网站设计上海比较好的公司排名
  • 做职业规划的网站邯郸市口碑网络技术有限公司
  • 如何做网站新手个人教程崇明建设镇网站
  • 广水网站建设怎么找网站开发公司
  • 做网站学什么什么专业wordpress 微信公众号
  • 网站建设维护网页设计营销型网站建设论坛
  • 寿光网站建设公司电商类网站开发项目流程
  • 合肥做网站羽毛球赛事规则与比赛规则
  • 网站推广方案计划书公司简介怎样写
  • 做网站的专业术语手机网站怎么做沉浸式
  • 长沙雨花区建设局网站wordpress打不开主页
  • 燕郊做网站的公司深圳高端设计公司有哪些
  • 历史类网站策划wordpress 摄影博客
  • 试玩网站建设网站有后台更新不了
  • 做app网站阿里云网站备案流程
  • 在百度建免费网站吗aspnet网站开发技术
  • 网站构成的作用是什么宣传片制作公司业务
  • 网站建设需什么软件内部网站 备案
  • 东坑仿做网站赤峰住房城乡建设部网站
  • 米拓模板网站建设房车网站建设意义