关于SOCKET发送不出数据的问题

zzkk3025 2009-04-12 10:16:44
关于SOCKET发送不出数据的问题
有个C/S1/S2 的应用系统, C 为一个客户端, S1 为一个中间转发数据的程序,S2 为处理业务的主程序。现在遇到一个较奇怪的现象, C(客户端) 程序在部分XP机器上运行正常,部分XP机器上出现频繁中断的情况,经过测试,C(客户端)在中断的XP机器上发送到一定的数据(大约5-6K)就发送不出去, S1程序未检测到 C(客户端)程序的任何异常。 C(客户端)在 WIN2003 上运行一切正常。
...全文
370 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MMas 2009-04-28
  • 打赏
  • 举报
回复
send之后出现阻塞错误,楼主的SOCKET是不是用消息模型,如果是的话,建议改用SELECT模型,在发送较多数据的时候会相对稳定些.
僵哥 2009-04-13
  • 打赏
  • 举报
回复
杀脑细胞的问题...

拜托,光这样子说,就好比在张贴你的“心情描述”,不觉得有任何可以帮助解决问题的意义。

最为简单的是,你的客户端程序怀疑是跟OS有关系,那至少得知道使用到哪些控件,哪些API,Socket通讯,至少用到哪些函数,或者哪种模式,什么select,WSAEventSelect,WSAAsyncSelect,或者WSAWaitForMultipleEvents,Overlapped I/O,I/O Completion Port...

OS的子版本号呢?甚至是UDP协议还是TCP协议都没有说明。

很多问题没那么神奇,关键在于需要耗费大量时间和精力去找原因。如果原因确实存在倒还简单,如果某些是三方原因(即所谓不是原因的原因),那就有得耗了。
lyguo 2009-04-13
  • 打赏
  • 举报
回复
感觉 XP 对互斥变量支持 有点问题。
我的程序也是,在2003 下运行正常,在XP下,有点不正常。
zzkk3025 2009-04-13
  • 打赏
  • 举报
回复
控件都是DELPHI 7.0 的标准控件,没有什么特殊的封装,现在做了以下变更,控制发送的数据包和频率,每次发送 16个字符 ,每秒发送 10次, 这样的程序效率很低,但这种情况下程序正常了,怀疑XP是那个地方有啥限制,XP 为 雨林木风 WWW.YLMF.COM 76481-OEM-0011903-01811 Ghost XP SP3 装机版 YN9.9 那位大侠遇见过这种情况?
经过大量的测试,只要每次发送大于16个字符 大约发送数据达到 5K 左右 ,客户端发送不 出去了 ,问题原因还没有找到 !
jason_28693 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gzmhero 的回复:]
发送太快,系统缓冲区满了,你没判断发送的返回值么,看看是不是每次都能全部发送出去。
[/Quote]

遇到过同样问题,getopt..获取socket状态信息, setopt.. 吧缓冲区设置大点儿。
不过如果网络慢,设置多大都会堵住。
send的时候查看缓冲区是否已能够容纳你要发送的buf的长度!允许发送再发送,否则就等待发送超时;如果是事件驱动就死等好了!
gzmhero 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zzkk3025 的回复:]
控件都是DELPHI 7.0 的标准控件,没有什么特殊的封装,现在做了以下变更,控制发送的数据包和频率,每次发送 16个字符 ,每秒发送 10次, 这样的程序效率很低,但这种情况下程序正常了,怀疑XP是那个地方有啥限制,XP 为 雨林木风 WWW.YLMF.COM  76481-OEM-0011903-01811  Ghost XP SP3 装机版 YN9.9 那位大侠遇见过这种情况?
经过大量的测试,只要每次发送大于16个字符 大约发送数据达到 5K 左右 ,客户端发送不 出去了 ,问题…
[/Quote]

发送太快,系统缓冲区满了,你没判断发送的返回值么,看看是不是每次都能全部发送出去。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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