2012-10-04 68 views
0

我寫了一個模擬C#http服務器,我有一個問題。當客戶端第一次關閉連接(已收到回覆中的所有數據),我的程序拋出一個異常:C#不能關閉流,直到寫入所有字節

出現InvalidOperationException:不能關閉流,直到所有的字節都 寫入。

我該怎麼辦?這是否意味着服務器套接字也被關閉了?

+2

也許閱讀[其它問題](http://stackoverflow.com/questions/4441370/cannot-close-stream-until-all-bytes-are-written)會給你一些想法。 – mbm

回答

1

服務器是否讀取了整個請求?

通常情況下,關閉連接的一側是一個好習慣,然後讀取直到獲得零字節(這意味着另一側關閉連接),然後釋放套接字。

private void SafeShutdown(Socket s) 
{ 
    socket.Shutdown(Send); 
    var buff = new byte[200]; 
    while(socket.Receive(buff) > 0) 
     ; 
    socket.Shutdown(Receive); 
    socket.Close(); 
} 
相關問題