最近新做了一个项目,基于CS结构的服务器客户端程序。
我做了一个简单的检测程序,开了虚拟的机器人客户端,在没隔0.5秒给服务器发报文,然后服务器
将此报文广播给所有在线的其他客户端,但是在服务器的连接客户端到了400个左右就出现了错误。
具体错误是:10055
由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
请问一下像这样的问题怎样解决?是我的程序内存泄漏造成的缓冲区不足,还是通讯上收发
处理不过来了,造成发送队列缓冲以满呢? 在线等待,谢谢大家了
我做了一个简单的检测程序,开了虚拟的机器人客户端,在没隔0.5秒给服务器发报文,然后服务器
将此报文广播给所有在线的其他客户端,但是在服务器的连接客户端到了400个左右就出现了错误。
具体错误是:10055
由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
请问一下像这样的问题怎样解决?是我的程序内存泄漏造成的缓冲区不足,还是通讯上收发
处理不过来了,造成发送队列缓冲以满呢? 在线等待,谢谢大家了
解决方案 »
- 窗体中间部份是透明的,可以看到下层窗体的视频,怎么样才能让鼠标不穿透中间的透明区域?
- 100分求一个小程序的编译,由共享的MFC 改为静态的MFC的编译
- unicode下debug和release下对字符的处理的区别?
- 请教思路:我需要做一个动态模拟LED的控件,实现的特效有百叶窗\马赛克等,该怎么实现呢?
- CoCreateInstanceEx???
- VC下怎么设计主窗口的样式???
- 家里准备装宽带了,以后就可以在家里回贴,发贴啦。激动中,散分。
- 关于用GetCommandLine取参数的问题,thecct(涛) 请进来看看
- 谁能给我一个实现树型控件内节点拖放的代码(就像资源管理器那样)
- 不裸奔的人是可耻的---中国冲入世界杯,MFC,统统丢到一边........
- 如何编程实现恢复指定目录下的某个文件,用2k系统的recover总是提示驱动器被锁定???
- 晕啊! 动态连接库的问题! 救命!
我查阅了一些资料:
MICROSOFT是这样提到的:
Because TCP/IP system doesn't free sockets immediately when they are closed (socket remains allocated for 240 seconds after application closes it) it is possible that system will report WSAENOBUFS due to lack of free socket resources.
如果是这样的话,资源在240秒后被释放,就算我的程序有内存泄漏,可能也不是主要的原因吧我是在测试服务器的承载能力,客户端是不会关闭套结子的,但是服务器的承载能力也不会底到
只有400吧MICROSOFT都说WIN2KSERVER一个PORT可以建立5000以上个连接呢
感觉还是你整体控制问题,找找看流程是否有问题。
好像 创建套接字 和 删除套接字很耗资源的。
------------------------------------------
如果排除基本的编程问题,一般情况是多次调用send的原因,造成系统缓冲满了。解决的根本办法是在每次发送后,判断是否真的发完了。发完了以后再发,就永远不会有这种错了。
但是这种方法有一个问题,就是当网络状况不好的情况,发的太快,收的慢的话,容易发生交通堵塞。不过,用程序控制的好的话,还是可以的。
因为,client send()---后服务器收到OnReceive()---recv() 然后send() to all connectionclient
这个过程一定要明确; client server 都要判断send() 和recv()是否接收完毕;