C# socket编程 出现 System.OutOfMemoryException 错误

newlovedew newlovedew 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题描述:ListenClientConnect过程 Exception of type 'System.OutOfMemoryException' was thrown.
运行环境:有100多个客户端,不出意外,长时间在线,心跳包是60秒一个,数据是5分钟一个
代码如下 之前出现过类似问题 加了GC.Collect(); 但是还是没解决

private void ListenClientConnect(object ServerSocket)
{
while (true)
{
try
{
Socket socket = (Socket)ServerSocket;
Socket clientSocket = socket.Accept();
Thread receiveThread = new Thread(receivesocketmessage);
receiveThread.IsBackground = true;
receiveThread.Start(clientSocket);
}
catch (Exception er) { Wlog wlog = new Wlog(); wlog.errlog("ListenClientConnect" + " " + er.Message); GC.Collect(); }
}
}
private void receivesocketmessage(object clientSocket)
{
Socket myClientSocket = (Socket)clientSocket;
byte[] result=new byte[1024];
DateTime dt = DateTime.Now;
while (true)
{
try
{
if ((DateTime.Now - dt).TotalSeconds > 70)
{
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
} //根据超时时间结束线程
int receiveNumber = 0;
//通过clientSocket接收数据
try
{
receiveNumber = myClientSocket.Receive(result);
}
catch (Exception er)
{
Wlog wlog = new Wlog(); wlog.errlog("myClientSocket.Receive " + er.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
//Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
string str = "";
if (receiveNumber > 0)
{
dt = DateTime.Now;
for (int i = 0; i < receiveNumber; i++)
{ str += result[i].ToString("X").PadLeft(2, '0'); }
jiexiPara jp = new jiexiPara(str, DateTime.Now, 1, "");
baowenjiexi(jp, clientSocket);
}
}
catch (Exception er) { Wlog wlog = new Wlog(); wlog.errlog("receivesocketmessage "+er.Message); }
//Thread.Sleep(80);
}
GC.Collect();
}
...全文

相关推荐

Unity+ASP.NET Socket联机游戏开发实战指南

TCP socket是实时多人游戏网络通信的底层基石,其核心在于连接管理、字节流处理、跨平台序列化与线程协同。理解粘包/半包原理、心跳保活机制、二进制协议设计及Unity主线程与Socket异步IO的桥接方式,是构建稳定联机逻辑的前提。这类技术广泛应用于局域网对战、教育VR、轻量MMO原型验证等场景,尤其适合需规避Photon/Mirror黑盒、直面网络本质的Unity开发者。本文以可运行的ASP.NET+Unity Socket联机Demo为载体,深入拆解从‘能连上’到‘连得稳’的关键七道工程坎。

weixin_34195142

《模式识别与数据挖掘》配套PPT课件

《模式识别与数据挖掘》配套PPT课件

Bryan Ding

科技成果转化项目进场交易前,评估备案环节需要准备哪些材料?_8.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核

人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核

Bryan Ding

跨境电商供应链管理(AIGC版)课件+教案+参考答案

跨境电商供应链管理(AIGC版)课件+教案+参考答案

Bryan Ding
评论 15
收藏 已收藏
分享
返回顶部
newlovedew
C# 111,129 成员 642,539 内容