咨询SOCKET传输数据的简单问题

LWLIFE 2017-01-13 09:00:09
基于TCP/IP传输数据,使用SOCKET传输:
1使用非阻塞模式还是阻塞模式(多线程),传输数据快?
2发送时一次全发送(有可能百M数据),还是自己拆包(如果拆包快,拆多少合理?32位,64位)发送数据快?

主要是想了解以上两点,每个时哪个模式效率高,谢谢各位 。
...全文
375 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
西厂程序员 2017-02-14
  • 打赏
  • 举报
回复
引用 17 楼 LWLIFE 的回复:
[quote=引用 14 楼 u011552404 的回复:] http://blog.csdn.net/jmppok/article/details/18360595 看这个博客!理论上没有大小限制,不过按这个博客说的,socket本身对4K限制,我没有测试过,你可以实际测试测试!
这里面的1024是1K还是1字节呢?[/quote]程序默认分配内存单位都是“字节”。
LWLIFE 2017-02-13
  • 打赏
  • 举报
回复
引用 14 楼 u011552404 的回复:
http://blog.csdn.net/jmppok/article/details/18360595 看这个博客!理论上没有大小限制,不过按这个博客说的,socket本身对4K限制,我没有测试过,你可以实际测试测试!
这里面的1024是1K还是1字节呢?
LWLIFE 2017-02-09
  • 打赏
  • 举报
回复
引用 14 楼 u011552404 的回复:
http://blog.csdn.net/jmppok/article/details/18360595 看这个博客!理论上没有大小限制,不过按这个博客说的,socket本身对4K限制,我没有测试过,你可以实际测试测试!
这里面的1024是1K还是1字节呢?
LWLIFE 2017-02-09
  • 打赏
  • 举报
回复
引用 12 楼 u011552404 的回复:
[quote=引用 11 楼 LWLIFE 的回复:] [quote=引用 9 楼 u011552404 的回复:] 规定MTU最大1500字节。每个包要小于1500字节!不会小的,你看看计算机的处理速度就会发现很快的!知道流媒体RTP拆包吗?就是平常最常见的实时监控画面,就是采用的拆包传输,都能实时传输视频了,所以1500并不小的——虽然看起来很小!
那你的意思就是程序定义的时候最大值是1500*8=12000?这样的吗?[/quote] 1500*8?我没有说吧!没有什么最大值的约束,但是应该有最佳值,以1500字节进行参考,并和程序实际的效果进行对比!(实际上1500*8应该是可以的)[/quote] 我的意思是说程序里定义的时候一般都是比特为单位的吧,一字节为八比特,所以如果以1500来计算定义就是1500*8这样的。我是这个意思的。
西厂程序员 2017-02-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/jmppok/article/details/18360595 看这个博客!理论上没有大小限制,不过按这个博客说的,socket本身对4K限制,我没有测试过,你可以实际测试测试!
西厂程序员 2017-02-09
  • 打赏
  • 举报
回复
最好的方法就是你编个程序测试不同的大小看看吧!
西厂程序员 2017-02-09
  • 打赏
  • 举报
回复
引用 11 楼 LWLIFE 的回复:
[quote=引用 9 楼 u011552404 的回复:] 规定MTU最大1500字节。每个包要小于1500字节!不会小的,你看看计算机的处理速度就会发现很快的!知道流媒体RTP拆包吗?就是平常最常见的实时监控画面,就是采用的拆包传输,都能实时传输视频了,所以1500并不小的——虽然看起来很小!
那你的意思就是程序定义的时候最大值是1500*8=12000?这样的吗?[/quote] 1500*8?我没有说吧!没有什么最大值的约束,但是应该有最佳值,以1500字节进行参考,并和程序实际的效果进行对比!(实际上1500*8应该是可以的)
LWLIFE 2017-02-09
  • 打赏
  • 举报
回复
引用 9 楼 u011552404 的回复:
规定MTU最大1500字节。每个包要小于1500字节!不会小的,你看看计算机的处理速度就会发现很快的!知道流媒体RTP拆包吗?就是平常最常见的实时监控画面,就是采用的拆包传输,都能实时传输视频了,所以1500并不小的——虽然看起来很小!
那你的意思就是程序定义的时候最大值是1500*8=12000?这样的吗?
西厂程序员 2017-02-09
  • 打赏
  • 举报
回复
引用 8 楼 LWLIFE 的回复:
[quote=引用 7 楼 u011552404 的回复:] 大文件一般都拆包,MTU值1500
拆成1500?还是多少呢?1500太小了吧,还是1500乘以多少呢?[/quote] 6楼说应该不错,传输的时候本身会自动拆包,拆包的原则就是MTU。但是实际我们传输的时候理论上可以一次分配很大的缓冲区比如1GB,来进行传输,但是实际对资源的消耗是很大的。所以一般在传输数据时分配的缓冲区设置的都很小——比如1024。具体可以通过测试程序来查看的实际的性能!
西厂程序员 2017-02-09
  • 打赏
  • 举报
回复
规定MTU最大1500字节。每个包要小于1500字节!不会小的,你看看计算机的处理速度就会发现很快的!知道流媒体RTP拆包吗?就是平常最常见的实时监控画面,就是采用的拆包传输,都能实时传输视频了,所以1500并不小的——虽然看起来很小!
LWLIFE 2017-02-09
  • 打赏
  • 举报
回复
引用 7 楼 u011552404 的回复:
大文件一般都拆包,MTU值1500
拆成1500?还是多少呢?1500太小了吧,还是1500乘以多少呢?
西厂程序员 2017-02-08
  • 打赏
  • 举报
回复
大文件一般都拆包,MTU值1500
LWLIFE 2017-01-18
  • 打赏
  • 举报
回复
自己顶贴自己顶贴自己顶贴
不二星空 2017-01-18
  • 打赏
  • 举报
回复
1使用非阻塞模式还是阻塞模式(多线程),传输数据快? 如果是1对1,建议使用阻塞模式,逻辑简单方便,不然还是建议使用非阻塞模式。设计合理传输数据速度不会差太多。 2发送时一次全发送(有可能百M数据),还是自己拆包(如果拆包快,拆多少合理?32位,64位)发送数据快? TCP是流式的,发送大包时底层会自动拆包。不过一般考虑不要发过大的包,因为牵涉到缓冲区以及接口效率的一些问题。大小可以参考MTU值。
LWLIFE 2017-01-17
  • 打赏
  • 举报
回复
顶贴等待大家沟通。
LWLIFE 2017-01-16
  • 打赏
  • 举报
回复
等待大家分享呀。
LWLIFE 2017-01-13
  • 打赏
  • 举报
回复
大佬们们都哪里去了呢?

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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