Linux下的UDP协议编程
[11-20 17:12:58] 来源:http://www.88dzw.com 嵌入式系统 阅读:8771次
文章摘要:Linux下的UDP协议编程介绍UDP协议,并提供一个适用于客户端和服务器端的实例子程序。关键词:Linux;UDP协议;TCP/IP协议;程序设计 UDP Protocol Program Based on LinuxLIU Chang, PENG Chuwu(School of Electrical Engineering, Hunan University, Changsha 410082,China)Key words: Linux; UDP protocol; TCP/IP protocol; programmingUDP(User Datagram Protocol)是一个面向数据
Linux下的UDP协议编程,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.comLinux下的UDP协议编程
介绍UDP协议,并提供一个适用于客户端和服务器端的实例子程序。
关键词:Linux;UDP协议;TCP/IP协议;程序设计
UDP是个很简单的协议,它建立在IP协议之上,利用IP数据报提供一种无连接的高效率的服务。它不保证数据的可靠,不进行重传,时延较短,很适用实时性要求高而不需要数据绝对可靠的应用。在网络通信质量较好的情况下,UDP体现出高效率,这适合于传送少量报文的应用,其可靠性由应用程序来保证,如:接收信号后向源方返回一个回响,超时重发、数据检验等功能需应用程序来实现。UDP不提供流控制,它按发送方的速率发送数据,而不管接收方的缓存区大小,这样容易造成溢出错误。由于UDP不存在客户端与服务器的连接,它可用同一个套接字向不同的目标发送数据报;同样,UDP可以是双向的,所以也可通过同一个套接字从几个不同的发送源接收数据报。 linux系统是通过套接字来进行网络编程的。下面介绍几个UDP数据报编程用到的基本套接字函数:
网络程序通过socket和其他几个函数调用,会返回一个用于通信的套接字描述符。Linux应用程序在执行任何形式的I/O的时候,程序是在读或者写一个文件描述符。因此,我们可以将创建的套接字描述符看成普通文件的描述符来操作,并可以通过向套接字描述符读写操作实现网络之间的数据交流,这就是linux设备无关性的好处。
(1)int socket(int domain,int type,int protocol)
函数socket()用于创建一个套接字描述符。参数domain说明网络程序所在的主机采用的通信协议(AFUNIX和AFINET等)。AFUNIX只能用于单一的UNIX系统进程间通信,而AFINET是针对Internet的,因而可以允许在远程主机之间通信。一般把它赋为AFINET。参数type指明创建的套接字类型,对应的参数值为SOCKDGRAM:数据报套接字,表明用的是UDP协议,提供无序的、不可靠的、无连接的通信。参数protocol,由于指定了type,所以这里一般只要用0来代替即可。
socket()得到套接字描述符,为网络通信做基本的准备工作,调用成功时将返回文件描述符,失败时将返回-1,通过查看error文件可以知道有关出错的详细信息。
(2)int bind(int sockfd,struct sockaddr*myaddr,int addrlen)
得到套接字描述符后,将套接口和机器上的一定的端口号绑定在一起。sockfd是调用socket函数返回的文件描述符;addrlen是sockaddr结构的长度:myaddr是一个指向sockaddr结构的指针,它保存着本地套接字的地址(即端口和IP地址)信息。不过由于系统兼容性的问题,一般不使用这个结构,而使用另外一个结构(struct sockaddrin)来代替。bind()函数在成功被调用时返回0,如果出错返回-1。
结构类型struct sockaddrin保存着套接口的地址信息,定义如下:
struct sockaddrin{short int sinfamily;/*地址族*/
unsigned short int sinport;/*端口号*/
struct inaddr sinaddr;/*IP地址*/
unsigned char sinzero[8];}/*填充0以保持与struct sockaddr同样大小*/
这个数据结构使得使用其中的各个元素更为方便,sinzero(它用来将sockaddrin结构填充到与sockaddr结构同样的长度)应该用bzero()或memset()函数将其置为0。另外,一个指向sockaddrin数据结构的指针可以强行转换为一个指向数据结构sockaddr的指针,反之亦然。
(3)int close(int sockfd)
函数close用来关闭一个套接字描述符,参数sockfd为指定要关闭的套接字描述符,函数close()在成功执行时返回0,否则返回-1。
以上三个函数中,前两个要包含头文件#include〈sys/types.h〉和#include〈sys/socket.h〉,后一个包含#include〈unistd.h〉。再介绍两个用于UDP协议的接收和发送函数,包含头文件#include〈sys/socket.h〉:
Tag:嵌入式系统,嵌入式系统开发,嵌入式开发,嵌入式系统
- 上一篇:温度补偿式单象限对数变换器
《Linux下的UDP协议编程》相关文章
- › 基于Linux下USB主机接口设计
- › 基于嵌入式Linux的TFT LCD IP及驱动的设计
- › 基于Linux平台的FPGA驱动开发
- › Linux PC和51系列单片机串行通信的设计
- › 利用MLD自动化操作系统移植降低 Linux 的成本
- › ColdFire单片机在 Clinux上的应用
- 在百度中搜索相关文章:Linux下的UDP协议编程
- 在谷歌中搜索相关文章:Linux下的UDP协议编程
- 在soso中搜索相关文章:Linux下的UDP协议编程
- 在搜狗中搜索相关文章:Linux下的UDP协议编程
编辑推荐
分类导航
最新更新
热门排行