当前位置: 技术问答>linux和unix
udp 套接口接受缓冲区的疑惑
来源: 互联网 发布时间:2015-12-02
本文导语: 使用UDP接收客户端发来的数据。数据包的大小不一定,所以使用buffer[65535]来recvfrom缓冲区的数据。 我有些疑惑往大家能够给予帮助: UDP的一个套接口有一个接受缓冲区来储存所有客户端发来的数据。每次调用recvfrom...
使用UDP接收客户端发来的数据。数据包的大小不一定,所以使用buffer[65535]来recvfrom缓冲区的数据。
我有些疑惑往大家能够给予帮助:
UDP的一个套接口有一个接受缓冲区来储存所有客户端发来的数据。每次调用recvfrom来接收数据包是读到其中一个客户的数据包后返回,还是要读到请求的字节数?
我是担心我请求65535字节的数据,读到了不止一个客户的数据。
我有些疑惑往大家能够给予帮助:
UDP的一个套接口有一个接受缓冲区来储存所有客户端发来的数据。每次调用recvfrom来接收数据包是读到其中一个客户的数据包后返回,还是要读到请求的字节数?
我是担心我请求65535字节的数据,读到了不止一个客户的数据。
|
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from int *fromlen)
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)
sockfd,buf,len的意义和read,write一样,分别表示套接字描述符,发送或接收的缓冲区及大小.recvfrom负责从sockfd接收数据,如果from不是NULL,那么在from里面存储了信息来源的情况,如果对信息的来源不感兴趣,可以将from和fromlen设置为NULL.sendto负责向to发送信息.此时在to里面存储了收信息方的详细资料.
所以只要设置了from就可以了
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)
sockfd,buf,len的意义和read,write一样,分别表示套接字描述符,发送或接收的缓冲区及大小.recvfrom负责从sockfd接收数据,如果from不是NULL,那么在from里面存储了信息来源的情况,如果对信息的来源不感兴趣,可以将from和fromlen设置为NULL.sendto负责向to发送信息.此时在to里面存储了收信息方的详细资料.
所以只要设置了from就可以了
|
udp用的是dgram类型socket,你从这个字面上看也能知道udp是基于包的,收到一个完整的包就会返回。