C# socket System.OutOfMemoryException

newlovedew 2014-03-17 11:04:37

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); }
Thread.Sleep(10);
}
}
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;
//数据处理过程
}
}
catch (Exception er) { Wlog wlog = new Wlog(); wlog.errlog("receivesocketmessage "+er.Message); }
Thread.Sleep(80);
}
}

错误:ListenClientConnect 引发类型为“System.OutOfMemoryException”的异常。
请问各位大神,这怎么解决?
...全文
260 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newlovedew 2014-03-17
  • 打赏
  • 举报
回复
请问是在listenclientconnect过程中么?
风一样的大叔 2014-03-17
  • 打赏
  • 举报
回复
楼主多线程结束后没有释放资源,加个GC.Collect();
newlovedew 2014-03-17
  • 打赏
  • 举报
回复
引用 7 楼 qiujialongjjj 的回复:
while (true) {这个是死循环啊, 有没有跳出条件? 在你每次退出线程代码后加个资源释放代码,GC.Collect(); }
因为while (true)是在监听,它要一直监听,不能跳出的
风一样的大叔 2014-03-17
  • 打赏
  • 举报
回复
while (true) {这个是死循环啊, 有没有跳出条件? 在你每次退出线程代码后加个资源释放代码,GC.Collect(); }
newlovedew 2014-03-17
  • 打赏
  • 举报
回复
引用 5 楼 qiujialongjjj 的回复:
楼主可以看看介个
初学者 看不太明白。您老就说说我这段程序的问题该咋解决吧?
风一样的大叔 2014-03-17
  • 打赏
  • 举报
回复
楼主可以看看介个
newlovedew 2014-03-17
  • 打赏
  • 举报
回复
引用 1 楼 qiujialongjjj 的回复:
楼主多线程结束后没有释放资源,加个GC.Collect();
能再详细的说明下么?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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