【问题标题】:C# Server Socket raises an unhandled exception of type 'system.stackoverflowexception' occurred in system.drawing.dllC# 服务器套接字引发 system.drawing.dll 中发生的“system.stackoverflowexception”类型的未处理异常
【发布时间】:2016-03-06 20:19:09
【问题描述】:

我正在尝试在服务器应用程序上接收一系列相框,并在开始时将它们显示在图片框中,程序运行完美,但 5 到 10 分钟后取决于我发送的框架我收到错误“类型未处理的异常System.Drawing.dll 中发生了“System.StackOverflowException””我在服务器中的代码如下所示

public void ImgRecive()
    {                        
       try
       {
            tcp.Start();
            sock = tcp.AcceptSocket();
            ns = new NetworkStream(sock);
            pictureBox1.Image = Image.FromStream(ns);
            tcp.Stop();
            if (sock.Connected == true)
            {
                while (true) { ImgRecive(); }
            }
            ns.Flush();
        }
        catch (Exception exxx) { MessageBox.Show(exxx.Message); }
    }

我试过了
图片框1.Image.Dispose(); 我也尝试删除图片框并重新创建它,但仍然有同样的问题

所以有解决问题的想法吗?

【问题讨论】:

  • 你不应该这样做while (true) { ImgRecive(); }
  • rene 谢谢,但它没有帮助我仍然有同样的问题
  • 其他人 @usr 如果你有 tcp 教程的名称可能会帮助或给我解决错误的解决方案,我将不胜感激
  • 我想我需要一些东西来清除卡住的东西,或者至少让它的尺寸更大

标签: c# tcp server stack-overflow


【解决方案1】:

请看这篇文章: https://msdn.microsoft.com/en-us/library/w6sxk224.aspx

~剪辑

当执行堆栈因嵌套方法调用过多而溢出时,将引发 StackOverflowException 异常。 相关提示 确保您没有无限循环或无限递归。 太多的方法调用通常表明递归非常深或无限。

此外,检查堆栈上分配的任何对象/数据,如果可能,尝试进行堆分配。

【讨论】:

  • 这都是真的,但它如何回答这个问题?
  • 感谢您的回答,但真的没有帮助我知道这一点
  • 好的,不用担心 :) 虽然您的回答确实说明了您的问题是我指出的递归,但您已经知道了。干杯。
  • @rene 查看 OP 的回答。我不必为他写出代码,有时只需轻推一下即可。
【解决方案2】:

我用 while 循环替换了递归,它对我有用 新代码是这样的

public void ImgRecive()
    {
        tcp.Start();
        sock = tcp.AcceptSocket();
        ns = new NetworkStream(sock);
        while (sock.Connected == true)
        {
            try
            {
                tcp.Start();
                sock = tcp.AcceptSocket();
                ns = new NetworkStream(sock);
                pictureBox1.Image = Image.FromStream(ns);
                tcp.Stop();
                ns.Flush();
            }
            catch (Exception exxx) { MessageBox.Show(exxx.Message); }
        }
    }

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多