【问题标题】:Close BufferedStream without TcpClient disconnect?在没有 TcpClient 断开连接的情况下关闭 BufferedStream?
【发布时间】:2013-04-26 23:45:03
【问题描述】:

我正在尝试通过 TcpClient 和 BufferedStream 发送图像。问题是我不能在不断开 TcpClient 的情况下发送数据。

发送数据:

while ((bytesread = bufferedinput.Read(buffer, 0, sizeBuffer)) > 0)
            {
                //Sending data
                bufferedoutput.Write(buffer, 0, bytesread);
            }

接收数据:

while ((bytesread = bufferedinput.Read(buffer, 0, buffsize)) > 0)
                {
                    bufferedoutput.Write(buffer, 0, bytesread);
                }

在哪里:

NetworkStream serverStream = client.GetStream();

BufferedStream bufferedoutput = new BufferedStream(serverStream);

问题是我必须在客户端投射bufferedoutput.Close(); 才能获取服务器接收到的数据,但这会断开我的客户端,这是一个问题。有什么建议吗?

【问题讨论】:

    标签: c# tcp tcpclient bufferedstream


    【解决方案1】:

    很明显,通过关闭与 TcpClient 对象关联的 NetworkStream 对象,可以断开客户端的连接。由于 TCP 是基于流的协议,您只能做以下两件事之一,要么 1.] 如果在 readtimeout 之前没有数据可用,则使用 networkstream.readtimeout 断开连接,或者 2.] 设计一个协议来告诉接收器长度数据,发送方愿意发送,并且只读取该长度的字节。

    【讨论】:

      【解决方案2】:

      您是否只尝试过bufferedoutput.Flush()

      【讨论】:

      • 是...当我调试程序时,我看到服务器端代码在 bufferedoutput.Close(); 之后停止了“while”循环;投射在客户端
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2012-02-03
      • 2015-10-24
      相关资源
      最近更新 更多