我写了一个模拟c#http服务器,我有一个问题。当客户端首先关闭连接时(已收到响应的所有数据),我的程序抛出异常:
InvalidOperationException:在所有字节都为止之前无法关闭流 写入。
我该怎么办?这是否意味着服务器套接字也关闭了?
答案 0 :(得分:1)
服务器是否读取了整个请求?
通常一个好习惯是关闭你的连接端,然后读取直到你得到零字节(这意味着另一边关闭连接),然后释放套接字。
private void SafeShutdown( Socket s )
{
socket.Shutdown( Send );
var buff = new byte[200];
while( socket.Receive( buff ) > 0 )
;
socket.Shutdown( Receive );
socket.Close();
}