您好,我想请教一下关于sendto()和recvfrom()两个函数参数的疑?

int sendto(SOCKET S,const char FAR *buf,int len,int flags,const char FAR *to,int tolen) 
int recvfrom(SOCKET S,const char FAR *buf,int len,int flags,const char FAR *from,int * fromlen)
疑问一:两个函数中的len是指缓冲区大小还是程序员要求的一次收发的字节数。如缓冲区大小为buf[1024],len=40行不行。(主要是以会看到说是发送字节数,一会又是缓冲区大小,把我搞晕了!!)
疑问二:第六个参数拿来干嘛?我知道sendto中to是指明目的端的套接字地址,tolen是套接字地址的大小(有的地方又说是目的端接收缓冲区大小,混乱),但tolen拿来有什么用?还有为什么recvfrom中第六个参数还要用指针,跟sendto还不一样??

慕沐林林
浏览 243回答 1
1回答

慕仙森

1、len是指缓冲区大小,就是第二个参数的长度。Length of the data in buf, in bytes.2、sendto中的是目的套接字结构的尺寸,只是标识一下to的结构所占的长度,主要是因为弱类型char*需要长度,目标并不关心必须是否sockaddr_in结构。指针的形式,是为了获取目标套接字地址的尺寸,也是为了能够进行弱类型解析。协议本身是不限定必须使用sockaddr_in结构的,但是windows编程中一般都是用sockaddr_in
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
JQuery