关于socket通讯中发送缓冲区的问题
问题是这样的,最近写一个C/S结构的工具, socket类型用 SOCK_STREAM, 开始使用默认的发送缓冲区大小, 发送过程是上层要发送的数据拆分为若干个小BUFFER发送,每个小包大小为 512 个字节,然后编号后发送出去,接收到的小包按照序号重组成大包使用,本地测试没有什么问题,后来在局域网中测试,结果出现数据丢失现象,经调试,看内存等发现还不是丢一个小包,只是小包中一些字节丢失,其他字节正常, 经过仔细检查代码,并未发现问题, 后来偶然间想到会不会是发送缓冲区影响的, 然后修改发送缓冲区大小为 512 字节, 经测试发现问题解决了, 后来发发送缓冲区改为 2*512 字节,测试也没问题,但是当 3*512 字节以后问题又出现, 无奈只能用 2*512 字节的缓冲区,
但是速度非常慢, 局域网中这个速度无法忍受, 看来修改缓冲区大小为治标的办法,现在希望各位大虾能指点个治本的办法,谢谢先了
问题点数:20、回复次数:2Top
1 楼taosiming(浪苍云)回复于 2006-11-01 22:55:19 得分 0
SOCK_STREAM会丢失?你不是在否定tcp协议么?看看字节排序和发送数据是不是多线程在操作而没有加锁什么的,感觉你没有找到根本原因!Top
2 楼wqf363(denny)回复于 2006-11-04 11:50:30 得分 0
socket类型用 SOCK_STREAM, 开始使用默认的发送缓冲区, linux下默认是16384B,而且TCP不可能出现发现丢包的问题,估计楼主的问题会不会是网络字节顺序与主机字节顺序引起的....Top




