sendto用于将应用缓冲区中的数据发适到指定的接收进程地址
#include <sys/socket.h>
Int sendto(int sockid, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);
参数说明:
socdid: UDP套接字描述符
msg: 数据缓冲区
flags: 用于控制发送的操作
to: 接收者的地址
tolen: 地址长度
返回说明:
发送成功,返发送数据的长度,发送失败,返回-1,并使用errno设置错误原因。
注意:
1)UDP只有一个发送缓冲区的大小,如果发送的数据长度大于这个缓冲区长度,则sendto返回EMSGSIZE错误,小于这个长度则总会成功;
2)sendto只是将数据从应用缓冲区拷贝到系统缓冲区,然后立即返回。
3)UDP允许发送空数据报,即只有数据数据报的首部,数据长度为0的数据报;
Recvfrom将从套接安缓冲区中接收发送给本端口的数据报
#include <sys/socket.h>
Int recvfrom(int sockid, const void *buf, int len, unsigned int flags, const struct sockaddr *from, int fromlen);
参数说明:
Sockid: UDP套接字描述符
Msg: 接收数据缓冲区
Flags: 接收操作选项
From: 如果程序希望得到UDP数据报的源地址和源端口,可以指定核心用于存放地址信息的应用空间from及这个空间的长度,否则可以将fromlen都设置为null;
返回说明:
Recvfrom如果接收的是普通的UDP数据报,它将返回数据报数据内容的长度,如果收到的是空数据报,它将返回0。
注意:
1)。Recvfrom收到的是整个数据报,不像TCP中存在数据边界控制的问题;
2)。UDP为数据的接收提供了缓冲区,缓冲区队列满时将UDP数据将被丢弃;