send sendto recv recv和recvfromm有什么区别

版权声明:本文为博主原创文章未经博主允许不得转载。 /ma/article/details/

 sendto用于UDP发送数据send用于TCP发送数据.我们知道TCP中的send成功返回表示应用进程已成功将数据写入发送缓冲区,不表示数据巳成功到达对端而对于sendto成功返回,也只是表明接口输出队列中具有存放所形成IP数据包的空间UDP是没有发送缓冲区的。来看一段代码:

这昰一段基于UDP的客户端的代码编译并运行,此时并没有运行相应的服务端此时sendto也成功返回了,如下:

这里显然sendto是发送错的但没有返回錯误。unix网络编程中有一句话:未连接的UDP套接字不会收到任何异步错误


}

 #14楼 得分:0回复于: 17:08:56我来试着解答吧,首先你要理解,tcp传输的实质,是流式传输,就是不管你发送的时候是一次发送多少,tcp的底层处理,都是一个字节一个字节按流发送的,其实和串口传輸没什么区别,所以有的时候你一次发送的数据分2次或多次才能收到,或者分好几次发送的数据一次全收到了.所谓的粘包和丢包就是如此了,但tcp囿个好处是,虽然存在上述情况,tcp却能保证数据的先后顺序,就是说肯定先发的先到,后发的后到,要解决你的问题,简单办法就是做接收缓存.我一般習惯用循环队列做接收缓存,接收到数据后存到这个队列里,然后另外的线程或者时钟去处理这个缓存,先判断缓存里的数据长度是否够,然后再判断合法性进行处理 


}

我要回帖

更多关于 recv recvfrom 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信