`
luliangok
  • 浏览: 816464 次
文章分类
社区版块
存档分类
最新评论

Beej’s Guide Network to Programming 系列连载15

 
阅读更多

5.8. sendto()和recvfrom() ---和我说话,数据报

“这很不错啊”,你说,“但是你还没有讲无连接数据报套接字呢?” 没问题,现在我们开始这个内容。

既然数据报套接字不是连接到远程主机的,那么在我们发送一个包之前需要什么信息呢? 不错,是目标地址!

sendto()函数原型:

int sendto(intsockfd, const void *msg, int len, unsigned int flags,

const struct sockaddr *to, socklen_ttolen);

你已经看到了,除了另外的两个信息外,其余的和函数 send() 是一样的。 to 是个指向数据结构 struct sockaddr 的指针,它包含了目的地的IP 地址和端口信息。tolen 可以简单地设置为sizeof(struct sockaddr)。 和函数 send() 类似,sendto()返回实际发送的字节数(它也可能小于你想要发送的字节数!),或者在错误的时候返回-1。

recvfrom()函数原型:

int recvfrom(intsockfd, void *buf, int len, unsigned int flags,

struct sockaddr *from, int *fromlen);

又一次,除了两个增加的参数外,这个函数和 recv() 也是一样的。from 是一个指向局部数据结构 struct sockaddr 的指针,它的内容是源机器的IP 地址和端口信息。fromlen 是个 int 型的局部指针,它的初始值为 sizeof(struct sockaddr)。函数调用返回后,fromlen保存着实际储存在 from 中的地址的长度。

recvfrom() 返回收到的字节长度,或者在发生错误后返回 -1。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics