如何实现UDP编程及通讯方式 华清远见80汇总_第1页
如何实现UDP编程及通讯方式 华清远见80汇总_第2页
如何实现UDP编程及通讯方式 华清远见80汇总_第3页
如何实现UDP编程及通讯方式 华清远见80汇总_第4页
如何实现UDP编程及通讯方式 华清远见80汇总_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品如何实现UDP编程及通讯方式UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议, 息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是OSI(Open System提供面向事务的简单不可靠信17。在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在 输层,处于IP协议的上一层。UDPW不提供数据包分组、组装和不能对数据包进行排序的缺点, 当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应

2、用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用OSI模型中,在第四层一一传也就是说,UDP协议。UDP协议从问世至今已经被使用了很多年, 虽然其最初的光彩已经被一些类似协议所掩盖, 但是即使是在今天 仍然不失为一项非常实用和可行的网络传输层协议。UDP既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?主要的原因有两个。 靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此 传输的效率不如UDP高。二是在许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要 求音频视频数据绝对的正确,只要保证连贯性就可以

3、了,这种情况下显然使用UDP会更合理一些。一是可TCP在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优UDP较多,因为它们即使偶尔丢失一两个数据包,也不ICQ和QC就是使用的UDP协议。点,所以通常音频、视频和普通数据在传送时使用会对接收结果产生太大影响。比如我们聊天用的UDP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt();*可选3、绑定IP地址、端口等信息到socket上

4、,用函数bind();4、循环接收数据,用函数recvfrom();5、关闭网络连接;UDP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt();*可选3、绑定IP地址、端口等信息到socket上,用函数bind();*可选4、设置对方的IP地址和端口等属性;5、发送数据,用函数sendto();精品精品6、关闭网络连接;UDP通讯服务器端源代码如下:#include #include #include #include #include #include #include #include int main(int

5、 argc, char *argv)struct sockaddr_in s_addr;struct sockaddr_in c_addr;int sock;socklen_t addr_len;int len;char buff128;/*创建socket ,关键在于这个SOCK_DGRAM */if (sock = socket(AF_INET, SOCK_DGRAM, 0) = -1) perror(socket);exit(errno); elseprintf(create socket.nr);精品memset(&s_addr, 0, sizeof(struct sockad

6、dr_in);/*设置地址和端口信息*/s_addr.sin_family = AF_INET;if (argv2)s_addr.sin_port = htons(atoi(argv2);elses_addr.sin_port = htons(7838);if (argv1)s_addr.sin_addr.s_addr = inet_addr(argv1);elses_addr.sin_addr.s_addr = INADDR_ANY;/*绑定地址和端口信息*/if (bind(sock, (struct sockaddr *) &s_addr, sizeof(s_addr) = -1

7、) perror(bind);exit(errno); elseprintf(bind address to socket.nr);/*循环接收数据*/addr_len = sizeof(c_addr);while (1) len = recvfrom(sock, buff, sizeof(buff) - 1, 0,(struct sockaddr *) &c_addr, &addr_len);if (len 0) perror(recvfrom);精品exit(errno);bufflen = 0;printf(收到来自s:%d的消息:snr.inet_ntoa(c_addr

8、.sin_addr), ntohs(c_addr.sin_port), buff);return 0;客户端源代码如下:#include #include #include #include #include #include #include #include int main(int argc, char *argv)struct sockaddr_in s_addr;int sock;int addr_len;int len;char buff128;/*创建socket ,关键在于这个SOCK_DGRAM */精品if (sock = socket(AF_INET, SOCK_DGRA

9、M, 0) = -1) perror(socket);exit(errno); elseprintf(create socket.nr);/*设置对方地址和端口信息*/s_addr.sin_family = AF_INET;if (argv2)s_addr.sin_port = htons(atoi(argv2);elses_addr.sin_port = htons(7838);if (argv1)s_addr.sin_addr.s_addr = inet_addr(argv1);else printf(消息必须有一个接收者!n);exit(0);/*发送UDP消息*/addr_len = sizeof(s_addr);strcpy(buff, hello im here);len = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *) &s_addr, addr_len);if (len 0) printf(nrsend error.nr);return 3;精品printf(send success.nr);return 0;编译程序用下列命令:gcc -Wall simple-udpserver.c -o servergcc -Wall simpl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论