C# C/S网络编程 由于系统缓存空间不足或列队已满,不能执行套接字上的操作

服务器那边开了一个线程,用于循环接受客户端的链接请求。但现在客户端退出后登上一段时间,服务器端就好出现“由于系统缓存空间不足或列队已满,不能执行套接字上的操作”的错误。下... 服务器那边开了一个线程,用于循环接受客户端的链接请求。但现在客户端退出后登上一段时间,服务器端就好出现“由于系统缓存空间不足或列队已满,不能执行套接字上的操作”的错误。
下边的截图就是服务器循环接受客户端的代码:
展开
 我来答
freeeeeewind
2013-09-21 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1351万
展开全部
改成以下代码试试

public void ReceiveMsg()

{
// 启动异步接收
IAsyncResult iar = udpReceiveClient.BeginRecevice(
new AsyncCallback(ReceiveCallback),
udpReceiveState);
}

private void ReceiveCallback(IAsyncResult iar)
{
// 继续异步接收
ReceiveMsg();

// 完成前一次异步接收EndReceive处理
UdpState udpReceiveState = iar.AsyncState as UdpState;

//……
}
要注意的是:
1)Socket异步接收处理过程中用到了.net framework内部线程池,而线程池中线程的数量是有限制的。
2)ReceiveMsg中的 while(true)循环是多余的
3)ReceiveMsg中的 lock(this) 没有意义
4)WaitOne, Sleep() 都是多余的
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式