请问网络编程中send 和 recv缓冲区的问题
1.我用TCP连接,使用阻塞套接字,用send发送了一个很大的buffer,比如100万字节,在接收端用recv,设置接收缓冲区和发送缓冲区一样大,接收到的还是100万字...
1.我用TCP连接,使用阻塞套接字,用send发送了一个很大的buffer,比如100万字节,在接收端用recv,设置接收缓冲区和发送缓冲区一样大,接收到的还是100万字节。看来并不需要应用程序重组啊,只要设置了和接收端一样大小的buffer就可以通过一次recv调用接收完一次传输的所有数据。这种想法对吗?
2.如果是UDP,在发送端发送了一个很大的buffer,在接收端用同样长度的buffer可以一次接收完所有数据吗?
3.如果是非阻塞套接字又如何呢?
真心求学,请指教!谢谢 展开
2.如果是UDP,在发送端发送了一个很大的buffer,在接收端用同样长度的buffer可以一次接收完所有数据吗?
3.如果是非阻塞套接字又如何呢?
真心求学,请指教!谢谢 展开
2个回答
展开全部
楼上说了点理论,对视对。
从实际效果上说
1:你说的这种现象,我估计是发到127.0.0.1的。发到公网上实际是要多次接收的。不过你可以指定MSG_WAITALL,那么对于阻塞socket,它会阻塞住,知道完整的填满100万字节才返回。
2:不能的,100万字节远远大于udp一般的最大传输长度,超过部分会丢失。
3:非阻塞套接字和1差不多。所部同的是,假如调用recv时,系统一个字节也没收到,返回SOCKET_ERROR,调用WSAGetLastError可以得到WSAEWOULDBLOCK。
搂住应该自己去看看msdn,仔细研究研究。假如英语不行就没办法了。这种msdn都是英语跟我差不多差劲的都看得懂的。
recv:http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx
send:http://msdn.microsoft.com/en-us/library/ms740149(VS.85).aspx
再去看看WSAAsyncSelect,select,WSAEventSelect。很详细的,看了你就不会问了。
从实际效果上说
1:你说的这种现象,我估计是发到127.0.0.1的。发到公网上实际是要多次接收的。不过你可以指定MSG_WAITALL,那么对于阻塞socket,它会阻塞住,知道完整的填满100万字节才返回。
2:不能的,100万字节远远大于udp一般的最大传输长度,超过部分会丢失。
3:非阻塞套接字和1差不多。所部同的是,假如调用recv时,系统一个字节也没收到,返回SOCKET_ERROR,调用WSAGetLastError可以得到WSAEWOULDBLOCK。
搂住应该自己去看看msdn,仔细研究研究。假如英语不行就没办法了。这种msdn都是英语跟我差不多差劲的都看得懂的。
recv:http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx
send:http://msdn.microsoft.com/en-us/library/ms740149(VS.85).aspx
再去看看WSAAsyncSelect,select,WSAEventSelect。很详细的,看了你就不会问了。
展开全部
同学,简单来说就是
TCP没有包的概念,是流式的。你一次不论发了多少字节过去,对方可能是分n次顺序收到的。
UDP 是基于包的。一次发多少字节,对方也收多少字节。但数据包到达顺序可能是乱序的。
另外一个udp包的最大长度是有限的,只有接近64K.
实际上在internet上这么大的包传输极容易丢失,因为在ip层会切割为小片段传输,一旦丢了一个小片段就会全都丢失,因为udp没有自动重传嘛。
所以udp一般程序上传输1K~ 1.3K 是个合适的范围。也就是比以太网的MTU小一点。如果你发的数据量比较大,要自己实现乱序重组。
和阻不阻塞没有关系。都一样的。
TCP没有包的概念,是流式的。你一次不论发了多少字节过去,对方可能是分n次顺序收到的。
UDP 是基于包的。一次发多少字节,对方也收多少字节。但数据包到达顺序可能是乱序的。
另外一个udp包的最大长度是有限的,只有接近64K.
实际上在internet上这么大的包传输极容易丢失,因为在ip层会切割为小片段传输,一旦丢了一个小片段就会全都丢失,因为udp没有自动重传嘛。
所以udp一般程序上传输1K~ 1.3K 是个合适的范围。也就是比以太网的MTU小一点。如果你发的数据量比较大,要自己实现乱序重组。
和阻不阻塞没有关系。都一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询