今天写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