3
我在我的服務器端下面的代碼:的TcpListener等待方法返回錯誤的值
// Bind to a specific local port number (SERVER_PORT) and any local IP address.
m_tlServer = new TcpListener(IPAddress.Any, SERVER_PORT);
// Start listening for connection attempts.
m_tlServer.Start();
// Start accepting new clients.
// Sleep until a new client(s) will try to connect to the server.
while (!m_bStopThread)
{
if (!m_tlServer.Pending())
{
// Sleep and try again.
Thread.Sleep(LISTENING_SLEEP_TIME);
continue;
}
else
{
// Accept a new client in a new thread.
Thread newthread = new Thread(new ThreadStart(HandleNewConnection));
newthread.Start();
}
}
我的問題是,當一個客戶端試圖連接到服務器,Pending
返回true
幾次(該方法一般爲4次)和幾個線程被創建。 我試圖通過使用AcceptTcpClient
方法(不知道是否有任何連接嘗試)的循環替換while循環,它的工作正常。所以,我認爲問題是由Pending
方法造成的。 任何人都可以幫助我嗎?謝謝,奧弗。
@Fuex:事實如此,但池是一個壞主意,應該不惜一切代價避免。我們不需要更多糟糕的編程軟件來佔用計算機的處理器。爲了使用更糟的解決方案,有一種更高效,更快,更簡單的選擇? –
@Fuex能夠終止'accept',你也可以使用回調函數,並在開始時檢查一些'm_stop'變量,但是框架在這種情況下做了什麼基本上是執行我在ThreadPool線程中編寫的代碼並調用你的回調。在這樣一個簡單的例子中,結果是一樣的。但真正的異步IO更強大,因爲同一個線程可能正在等待新客戶端,等待新數據包到達所有客戶端並等待發送數據...(然後運行javascript而不是C#並稱之爲node.js) –
應該有一個「與幽靈說話」的徽章 –