2014-12-07 85 views
1

我有问题,听了一的TCPListener内的连接,基本上我在不同的线程运行此像这样:线程抛出StackoverflowException

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”异常,我需要听听不同的线程上的连接,就像我编写它的方式,有任何解决它的建议?

回答

4

Listen()正在调用自己,最终会导致堆栈溢出。

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

+0

这不会让我的线程继续监听其他传入的连接。 – 2014-12-07 04:35:21

+2

然后你可能会有一个设计缺陷! – 2014-12-07 04:35:41

+2

@RaúlSanpedro:是的,当然会。你的方法只是循环,反复调用'Accept()'。这可以。当然,你需要调用Receive()来接收数据。对于具有网络功能的程序,除了接受入站连接请求还有很多。但是你至少可以避免在你的Listen()方法中进行无限递归调用。 :) – 2014-12-07 04:36:56

相关问题