我有一個關於this問題(「異步服務器插座多個客戶端」)的問題。微軟異步服務器插座示例
無論是微軟改變the example因爲格魯斯答案,或者我真的不明白這一點 - 在本例中 它說:
while (true) {
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...");
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
據我瞭解BeginAccept()函數在同時contiuously稱爲(真)循環,只有被調用AcceptCallback()函數後纔會停止,因爲發生的第一件事是allDone.Set()。
但是Groo所述
與MSDN例子的問題是,它允許僅單個客戶端的連接(listener.BeginAccept只調用一次)。
而實際上我不知道爲什麼ManualResetEvent的allDone在所有使用... 我認爲listener.EndAccept(AR)方法阻止反正。
Lisner.BeginAccept()如果在仍然運行時第二次調用時拋出異常? 但如果是這樣,爲什麼allDone.Set()在listener.EndAccept(ar)之前?
而另一個問題:我收到了EOF,後
可我只是調用handler.BeginReceive(...),在ReadCallback(IAsyncResult的AR)函數來等待來自同一更多進來的數據客戶?
任何有經驗的人都可以向我解釋一下嗎?
謝謝!
我已經回答了一段時間,但是IIRC最初的例子沒有循環。我們可以查看[那段時間的互聯網檔案頁面](http://web.archive.org/web/20110201000000*/http://msdn.microsoft.com/en-us/library/fx6588te.aspx),但目前服務器似乎正在關閉。 – Groo 2014-11-03 13:27:21
然後有一箇舊的問題,因爲它有一個鏈接到更新後的源代碼... – fosb 2014-11-14 18:27:09