设为首页收藏本站

无忧开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索

[网络编程] 揭开网络编程的神秘面纱(四)

[复制链接]
王先森 发表于 2015-5-19 14:50:35 | 显示全部楼层 |阅读模式
    大家好,欢迎大家再次走进凌阳教育公众平台并阅读网络编程教学部分,上期的文章中,讲解了UDP接收数据、网络数据的格式以及地址结构体等知识点,基本都是网络知识点和UDP客服端的补充,今天文章的内容则是讲解UDP的server部分。
  UDP的server与client最明显的区别为server程序必须有确定的IP地址和端口(port),举个简单的例子解释这个问题,A打B的电话请求B帮他做某件事情,此时A相当于客户端请求B提供服务,B相当于A的服务器。打电话建立在,A知道B的电话号码的基础上,且B的电话号码唯一不可变,否则A不可能联系到B。此处的server是同样的道理,必须要有确定的端口和IP地址,客户端才能找到服务器并发来请求。
        怎么完成上述的条件呢?对于server,调用bind函数,来完成地址结构体与socket套接字的绑定。对于client在sendto函数发送数据时,指定server的ip与port就可以发送数据了。
       bind函数能够完成确定server端口和ip地址的需求,下面是bind函数原型。
        int bind (int sockfd,const struct sockaddr *myaddr,socklen_t addrlen);
        功能:将本地地址结构体与socket套接字绑定,确定端口和IP地址
        参数:
            sockfd: socket套接字
            myaddr: 指向特定协议的地址结构体指针
            addrlen: 改地址结构的长度
        返回值:成功返回0,失败返回其他。
          server经过bind后,即满足了作为server的条件,能够接受client的服务请求,同时对请求作出处理之后,可以将处理的结构反馈给client。这里边用到的是前边讲过的sendto函数和recvfrom函数,对于两个函数不清楚的同学可以去翻阅前边的讲解。server所以要bind是因为它的本地port需要是固定的,而不是随机的,客户端同样也可以bind,但是我们一般不选择使用绑定,因为客户端绑定后在程序的移植过程中容易出现端口重复bind的情况。
        UDPserver的需要注意的地方并不多,只要通过bind函数确定端口和ip地址后,剩余的部分和client的并没有太大的区别。从这一点上也可以看出,UDP的server和client并没有太大的区别,双方都可以发送和接受数据,一般认为提供服务的一方为server,接受服务的一方为client。
        因为UDP数据面向无连接且收到数据后没有任何的确认信息,所以UDP通信的速度稍微快一些但不稳定,一般用于对安全性要求不高的数据的传输,海量数据的传输不能使用UDP。UDP的典型应用有DNS域名解析、NFS(网络文件系统)、DHCP(动态主机配置斜体)以及广播多播等。
        关于UDP的基本知识就介绍这么多,下周主要研究的是基于UDP实现的TFTP(简单文件传输协议)的通信过程。
        热爱linux网络编程的少年少女们,下周见。
黄蓉 发表于 2015-5-19 15:05:11 | 显示全部楼层
发发呆,回回帖,工作结束~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无忧开发者社区 (京ICP备09010168号

GMT+8, 2017-11-19 11:07 , Processed in 0.230478 second(s), 36 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 51Develop.Net

快速回复 返回顶部 返回列表