recvfrom()和sendto()函数

来源:互联网 发布:视频录制软件 编辑:程序博客网 时间:2024/05/16 14:26

recvfrom()和sendto()函数  

2009-11-13 16:55:09|  分类: 函数手册|举报|字号 订阅

sendto()和recvfrom()——利用数据报方式进行数据传输  
1.sendto()函数
  在无连接的数据报socket方式下,由于本地socket并没有与远端机器建立连接,所以在发送数据时应指明目的地址,sendto()函数原型为:  
  int sendto(int sockfd, const void *msg,int len,
unsigned int flags, const struct sockaddr *to, int tolen);  
  该函数比send()函数多了两个参数,to表示目地机的IP地址和端口号信息,而tolen常常被赋值为sizeof (struct sockaddr)。Sendto 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。  
2.recvfrom()函数
recvfrom()函数原型为:  int recvfrom(int sockfd,void *buf,int len,
unsigned int lags,struct sockaddr *from,int *fromlen);  
   from是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。fromlen常置为 sizeof (struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数。 recvfrom()函数返回接收到的字节数或当出现错误时返回-1,并置相应的errno。
  
  应注意的一点是,当你对于数据报 socket调用了connect()函数时,你也可以利用send()和recv()进行数据传输,但该socket仍然是数据报socket,并且利 用传输层的UDP服务。但在发送或接收数据报时,内核会自动为之加上目地和源地址信息。
0 0
原创粉丝点击