【问题标题】:c# NetworkStream write() and read()c# NetworkStream write() 和 read()
【发布时间】:2017-10-13 22:44:34
【问题描述】:

我想知道如何阻止 Networkstream.Read() 阻止线程。我有单独的线程,NetworkStream.Read() 正在等待来自服务器的数据。假设用户按下某个按钮将一些数据发送到服务器。但是当其他线程中有NetworkStream.Read() 等待数据时,我不能调用NetworkStream.Write()。我每次都可以锁定NetworkStream,但NetworkStream.Read() 会阻塞线程,所以我在读取至少1 个字节之前无法发送数据。

【问题讨论】:

    标签: c# tcpclient networkstream


    【解决方案1】:

    您可以同时发出readwrite,如MSDN docs 中的文档所述

    可以在 NetworkStream 类的实例上同时执行读取和写入操作,而无需同步。只要写操作只有一个线程,读操作只有一个线程,读写线程之间就不会相互干扰,也不需要同步。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        您可能会在某些时间段内查询 NetworkStream.DataAvailable 属性,并且仅当它为 true 时才读取。 “如果 DataAvailable 为真,则立即返回对 Read 的调用。”所以你不会阻塞流。

        【讨论】:

          【解决方案4】:

          NetworkStream 类提供了在阻塞模式下通过 Stream 套接字发送和接收数据的方法。有关阻塞与非阻塞 Socket 的更多信息,请参阅Using an Asynchronous Client Socket

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-04-24
            • 2019-04-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-20
            • 2011-02-04
            • 2022-12-13
            相关资源
            最近更新 更多