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

本文详细介绍了数据报套接字的概念,并着重讲解了sendto()和recvfrom()函数的使用方法。通过实例演示,帮助读者了解如何在不建立连接的情况下发送和接收数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值