关于TCP下send函数的问题

SilverWings 2010-05-18 09:46:34
1. 用getsockopt函数看了一下,winsock的发送缓冲区默认大小有8k,但我不论是在阻塞或非阻塞模式下用send发送一个大于8k的包时,函数都可以正常返回。这样是不是说当一次send的数据大于缓冲区的大小的时候,操作系统会自动帮我们分包?

2. send一次发送的数据到底有没有大小限制,有的话是多少?

3. 一般send多大的数据才比较合适?
...全文
384 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dong364 2010-05-20
  • 打赏
  • 举报
回复
http://dev.firnow.com/course/3_program/vc/vc_js/20090307/159227.html
【天运子】 2010-05-20
  • 打赏
  • 举报
回复
1024*不要太大就行了啊,自己也可以测试下啊
hello_symbol 2010-05-20
  • 打赏
  • 举报
回复
这个好像受限于程序站的大小吧
wangk 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 silverwings 的回复:]

我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
[/Quote]

windows下使用TransmitFile或TransmitPackets来发送文件快一点。
buptzwp 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 silverwings 的回复:]

我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
[/Quote]
在阻塞的情况下,send函数可以发送很大的数据(本人发过1.5M的大小)。但是sendto能发送的却很小(具体不知道多大),如果超过了,就会sendto失败。
ddddfbb 2010-05-20
  • 打赏
  • 举报
回复
en ...你的包被底层分开发送了 超过了MTU的设置都分段了 但是ip层会在你发的包上打标识全发完后会返回给你这个包发送的字节数
dinona 2010-05-20
  • 打赏
  • 举报
回复
你要在两台机子之间测试,不要在同一台机子测试
sanguomi 2010-05-19
  • 打赏
  • 举报
回复
Send 返回的并不是你发送,服务端接收的
weizhen861207 2010-05-19
  • 打赏
  • 举报
回复
我也发现这个问题了 发送的数据超过8K也成功返回
SilverWings 2010-05-18
  • 打赏
  • 举报
回复
我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
BloodFighter 2010-05-18
  • 打赏
  • 举报
回复
首先说你的tcp还是udp呀,
如果是udp,包超过了,铁定完蛋
tcp是流,因此那个buffer就是一个缓冲,因此不受限制
还有socket的send函数是有返回值的,那个是你实际的发送数据量,并不是你send一次就完事的,要做一个循环反复发送,直到你的所有数据全部发完才算
superdiablo 2010-05-18
  • 打赏
  • 举报
回复
你要看实际返回的已发送字节数是多少。一次发送的数据不会超过缓冲区大小。看你什么应用,如果是发送文件每次发送越大越好,当然超过缓冲区TCP只会把部分数据拷贝到缓冲区里,其他的你还得再次发送。
arong1234 2010-05-18
  • 打赏
  • 举报
回复
send从来都不会等所有数据发送完毕再返回,他的返回值是实际发送的字节数,你需要重发还没有发出的部分
send发送一般不会超过1.5kb
随便多大的报文都不保证完整发出,你必须重发没有发完的数据

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧