Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于TCP侦听的线程抛出StackoverflowException_C#_Multithreading_Exception_Stack Overflow - Fatal编程技术网

C# 用于TCP侦听的线程抛出StackoverflowException

C# 用于TCP侦听的线程抛出StackoverflowException,c#,multithreading,exception,stack-overflow,C#,Multithreading,Exception,Stack Overflow,我在侦听TCPListener中的连接时遇到问题,基本上我是在另一个线程上运行它,因此: listenThread = new Thread(new ThreadStart(Listen)); void Listen(...) { while (true) { Socket socket = Listener.AcceptSocket(); Connection connection = new Connection(socket);

我在侦听TCPListener中的连接时遇到问题,基本上我是在另一个线程上运行它,因此:

listenThread = new Thread(new ThreadStart(Listen));

void Listen(...)
{
    while (true)
    {
        Socket socket = Listener.AcceptSocket(); 
        Connection connection = new Connection(socket);
        connection.onInit();
        Thread.Sleep(100);
        Listen();
    }
}
我不知道下一步该怎么解决这个Stackoverflow异常,我需要像我编码它的方式一样,倾听不同线程上的连接,有没有修复它的建议?

listen正在调用自身,这最终会导致堆栈溢出

只需在while循环结束时删除对Listen的调用。

Listen正在调用自身,这将最终导致堆栈溢出


只需在while循环结束时删除侦听调用。

这不会让我的线程继续侦听其他传入连接。那么您可能有设计缺陷@劳尔桑佩德罗:是的,当然会。您的方法只是循环,反复调用Accept。这很好。当然,在某些地方您需要调用Receive来接收数据。支持网络的程序不仅仅是接受入站连接请求。但至少可以避免Listen方法中的无限递归调用:这不会让我的线程继续侦听其他传入连接。那么您可能有设计缺陷@劳尔桑佩德罗:是的,当然会。您的方法只是循环,反复调用Accept。这很好。当然,在某些地方您需要调用Receive来接收数据。支持网络的程序不仅仅是接受入站连接请求。但至少可以避免Listen方法中的无限递归调用: