2014-12-07 30 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

相關問題