基于Linux下的UDP编程(二)

2014-11-24 12:02:50 · 作者: · 浏览: 7
uct sockaddr *to,socklen_ttolen);


2>函数功能:


向目标主机发送消息


3>函数形参:


s:套接字描述符。


*msg:发送缓冲区


len:待发送数据的长度


flags:控制选项,一般设置为0或取下面的值


(1)MSG_OOB:在指定的套接字上发送带外数据(out-of-band data),该类型的套接字必须支持带外数据(eg:SOCK_STREAM).


(2)MSG_DONTROUTE:通过最直接的路径发送数据,而忽略下层协议的路由设置。


to:用于指定目的地址


tolen:目的地址的长度。


4>函数返回值:


执行成功后返回实际发送数据的字节数,出错返回-1,错误代码存入errno中。


5>函数举例:


char send_buf[BUFFERSIZE];


struct sockaddr_in addr_client;



memset(&addr_client,0,sizeof(struct sockaddr_in));


addr_client.sin_family = AF_INET;


addr_client.sin_port = htons(DEST_PORT);


if(inet_aton(“172.17.242.131”,&addr_client.sin_addr)<0){


perror(“inet_aton”);


exit(1);


}


if(sendto(sock_fd,send_buf,len,0,(strut sockaddr*)&addr_client,sizeof(struct sockaddr_in)) <0){


perror(“sendto”);


exit(1);


}


5.recvfrom


1>函数原型:


#include


#include


ssize_t recvfrom(int s,void *buf,size_t len,intflags,struct sockaddr *from,socklen_t *fromlen);


2>函数功能:接收数据


3>函数形参:


int s:套接字描述符


buf:指向接收缓冲区,接收到的数据将放在这个指针所指向的内存空间。


len:指定了缓冲区的大小。


flags:控制选项,一般设置为0或取以下值


(1)MSG_OOB:请求接收带外数据


(2)MSG_PEEK:只查看数据而不读出


(3)MSG_WAITALL:只在接收缓冲区时才返回。


*from:保存了接收数据报的源地址。


*fromlen:参数fromlen在调用recvfrom前为参数from的长度,调用recvfrom后将保存from的实际大小。


4>函数返回值:


执行成功后返回实际接收到数据的字节数,出错时则返回-1,错误代码存入errno中。


5>函数实例:


char recv_buf[BUFFERSIZE];


struct sockaddr_in addr_client;


int src_len;


src_len = sizeof(struct sockaddr_in);


int src_len;


src_len = sizeof(struct sockaddr_in);


if(recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(structsockaddr *)&src_addr,&src_len)<0){


perror(“again_recvfrom”);


exit(1);


}