导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

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”的异常。
请问各位大神,这怎么解决?
...全文
179 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newlovedew 2014-03-17
请问是在listenclientconnect过程中么?
回复
楼主多线程结束后没有释放资源,加个GC.Collect();
回复
newlovedew 2014-03-17
引用 7 楼 qiujialongjjj 的回复:
while (true) {这个是死循环啊, 有没有跳出条件? 在你每次退出线程代码后加个资源释放代码,GC.Collect(); }
因为while (true)是在监听,它要一直监听,不能跳出的
回复
while (true) {这个是死循环啊, 有没有跳出条件? 在你每次退出线程代码后加个资源释放代码,GC.Collect(); }
回复
newlovedew 2014-03-17
引用 5 楼 qiujialongjjj 的回复:
楼主可以看看介个
初学者 看不太明白。您老就说说我这段程序的问题该咋解决吧?
回复
楼主可以看看介个
回复
newlovedew 2014-03-17
引用 1 楼 qiujialongjjj 的回复:
楼主多线程结束后没有释放资源,加个GC.Collect();
能再详细的说明下么?
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.