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);
}