
不可能知道服务器是否已经发送完毕,因为你发送的没有数据协议的格式,你可以让发送方与接收方定个协议。其实你可以在recv时加个参数,让它只是看看有没有数据到达,recv最后那个参数设为MSG_OOB就可以,当发现有数据到时,你先Sleep一下,至于多长时间就要看实际情况,一般几十个毫秒就绝对够了,然后,你再recv一下,这次最后那个参数为MSG_WAITALL就可以,这样就一次性接收完毕
1、recv和send函数提供了和read和write差不多的功能。但是他们提供了第四个参数来控制读写 *** 作
int recv(int sockfd,void buf,int len,int flags)
int send(int sockfd,void buf,int len,int flags)
前面的三个参数和read,write相同,第四个参数能够是0或是以下的组合:_______________________________________________________________
| MSG_DONTROUTE | 不查找路由表 |
| MSG_OOB | 接受或发送带外数据 |
| MSG_PEEK | 查看数据,并不从系统缓冲区移走数据 |
| MSG_WAITALL | 等待任何数据 |
|————————————————————–|
如果flags为0,则和read,write一样的 *** 作。2、在unix中,所有的设备都可以看成是一个文件,所以我们可以用read来读取socket数据。
socket缓冲区越大越好。根据相关公开资料查询:socket缓冲区越大接受和发送文件越多,越流畅。Socket的发送和接收,就是调用send和recv函数。Socket有一个缓冲区,send的数据buffer,它会先发到缓冲区里面,然后由 *** 作系统去调度发送,send返回成功,说明数据放到缓冲区成功了,不代表对端接收了,更不代表对端应用程序正确处理了。所以我们会看到缓冲区不满的时候,send函数很快就返回了,而缓冲区满的时候,send函数会阻塞直到超时返回错误。recv函数同理,实际上是从缓冲区获取数据,发过来的网络数据,系统将会放到缓冲区里面,直到recv函数去获取数据,才取出来,并且释放出空间。
以上就是关于recv()函数怎么一次接收send()三次发送的数据(c语言实现)。全部的内容,包括:recv()函数怎么一次接收send()三次发送的数据(c语言实现)。、socket的read和recv函数的区别、socket缓冲区越大越好吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)