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.com

Linux下的UDP协议编程

介绍UDP协议,并提供一个适用于客户端和服务器端的实例子程序。
  关键词:Linux;UDP协议;TCP/IP协议;程序设计

UDP Protocol Program Based on Linux LIU Chang, PENG Chuwu (School of Electrical Engineering, Hunan University, Changsha 410082,China)   Key words: Linux; UDP protocol; TCP/IP protocol; programming   UDP(User Datagram Protocol)是一个面向数据报的简单传输层协议,它为应用程序发送和接收数据报。它是一种无连接协议,即它不像TCP那样需要建立服务器与客户端的连接才可以工作。
  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〉:

[1] [2]  下一页


Tag:嵌入式系统嵌入式系统开发,嵌入式开发嵌入式系统