【问题标题】:Network stream read when socket is closed套接字关闭时读取的网络流
【发布时间】:2019-01-17 03:54:48
【问题描述】:

这个问题很简单。阅读documentation about NetworkStream Read 并引用:

返回 整数32 从 NetworkStream 读取的字节数,如果套接字关闭,则为 0。

后来

IO异常 底层 Socket 已关闭。

哪个是真的?显然两者不能同时为真,一定有区别。 (看来前者是真的)

【问题讨论】:

    标签: c# networkstream


    【解决方案1】:

    两者

    如果 客户端套接字(与 NetworkStream 绑定)在您调用 Read 之前关闭,则会引发 IO 异常。

    如果服务器套接字Read期间(或之前)关闭,它可能返回0,这意味着服务器什么也没发送。

    一些例子:

    var server = new Socket(SocketType.Stream, ProtocolType.Tcp);
    var client = new Socket(SocketType.Stream, ProtocolType.Tcp);
    
    /* Init the server socket */
    server.Bind(new IPEndPoint(IPAddress.Any, 19998));
    server.Listen(50);
    server.BeginAccept(ar =>
    {
        var server2 = server.EndAccept(ar);
        //server2.Close(); // Read will return 0
    },
    null);
    
    /* Init the client socket */
    client.Connect(IPAddress.Loopback, 19998);
    NetworkStream stream = new NetworkStream(client);
    //client.Close(); // Read will throw IOException
    var buf = new byte[128];
    int read = stream.Read(buf, 0, 128);
    

    【讨论】:

    • 如何在期间读取一个套接字?我试图了解为什么我使用的服务器向我发送“0 字节”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2015-12-20
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多