【问题标题】:C# cannot close stream until all bytes are written在写入所有字节之前,C# 无法关闭流
【发布时间】:2012-10-04 09:32:36
【问题描述】:

我编写了一个模拟 c# http 服务器,但遇到了问题。当客户端第一次关闭连接(响应的所有数据都已收到)时,我的程序会抛出异常:

InvalidOperationException:在所有字节都完成之前无法关闭流 写的。

我该怎么办?这是否意味着服务器套接字也已关闭?

【问题讨论】:

标签: c# httplistener


【解决方案1】:

服务器是否读取了整个请求?

一般来说,关闭你的一侧的连接是一个好习惯,然后读取直到你得到零字节(这意味着另一端关闭了连接),然后释放套接字。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2015-05-04
    • 1970-01-01
    • 2013-09-25
    • 2010-09-20
    相关资源
    最近更新 更多