下面的代碼塊時並行至4-5線程運行良好,但作爲啓動的線程的數目某處增加超過10個併發線程Socket.Recieve失敗當多線程
int totalRecieved = 0;
int recieved;
StringBuilder contentSB = new StringBuilder(4000);
while ((recieved = socket.Receive(buffer, SocketFlags.None)) > 0)
{
contentSB.Append(Encoding.ASCII.GetString(buffer, 0, recieved));
totalRecieved += recieved;
}
的Recieve
方法返回失敗零字節被讀取,如果我繼續調用接收方法,那麼我最終會得到異常'已建立的連接被主機中的軟件中止'。所以我假設主機實際上發送了數據然後關閉了連接,但由於某種原因,我從未收到過它。
我很好奇爲什麼當有很多線程出現這個問題。我認爲它必須與這樣一個事實有關,即每個線程的執行時間不會太多,因此導致此錯誤的線程有一些空閒時間。只是不知道爲什麼空閒時間會導致套接字不能接收任何數據。
編輯:只是爲了澄清。每個線程都有自己的個人套接字讀取不同的數據。
要明確一點,每個線程都有自己的套接字? – 2010-04-07 20:14:47
我不清楚的是,如果你有很多線程每個線程讀一個套接字或一個套接字? – ParmesanCodice 2010-04-07 20:15:24
你知道SocketError代碼(SocketException.ErrorCode)嗎?可能是一個超時... – ParmesanCodice 2010-04-07 20:30:16