首页 > 其他 > 详细

UDP中sendto()和recvfrom()两个函数的使用

时间:2020-04-22 13:22:43      阅读:61      评论:0      收藏:0      [点我收藏+]

  今天写Linux实验遇到了个问题:

 本着照抄照搬的原则,将实验指导书上的sendto()抄了下来,在使用sendto()出了错,格式不正确。

技术分享图片

 

  于是百度查找UDP的sendto()函数的用法:

————————————————

函数原型
int sendto (int s, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen);

int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);

函数说明
sendto(),是把UDP数据报发给指定地址;recvfrom()是从指定地址接收UDP数据报。

参数说明

s:              socket描述符。
buf:         UDP数据报缓存地址。
len:          UDP数据报长度。
flags:       该参数一般为0。
to:            sendto()函数参数,struct sockaddr_in类型,指明UDP数据发往哪里报。
tolen:      对方地址长度,一般为:sizeof(struct sockaddr_in)。
fromlen:recvfrom()函数参数,struct sockaddr_in类型,指明从哪里接收UDP数据报。
函数返回值

对于sendto()函数,成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

对于recvfrom()函数,成功则返回接收到的字符数,失败则返回-1,错误原因存于errno中。

————————————————
版权声明:本文为CSDN博主「leon_zeng0」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leon_zeng0/java/article/details/90140605

 

找到相应的错误:

技术分享图片

 

 

错误:buf后面跟着的参数应是buf的长度,以及size 的赋值有问题。(size == tolen:对方地址长度,一般为:sizeof(struct sockaddr_in)。)

技术分享图片

 

 技术分享图片

 

 成功解决问题。

小结:在使用不熟悉的函数了,应先查看其函数的参数以及含义。

技术分享图片

 

UDP中sendto()和recvfrom()两个函数的使用

原文:https://www.cnblogs.com/OneSongsTime/p/12751267.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!