今天研究了一下NetworkStream 类,NetworkStream 类提供在阻止模式下通过 Stream 套接字发送和接收数据的方法。以下来自msdn:
NetworkStream 类提供在阻止模式下通过 Stream 套接字发送和接收数据的方法。可以在同步和异步数据传输时使用 NetworkStream 类。 若要创建 NetworkStream,必须提供连接的 Socket。 也可指定 NetworkStream 对所提供的 Socket 具有哪些 FileAccess 权限。 默认情况下,关闭 NetworkStream 并不会关闭所提供的 Socket。 如果希望 NetworkStream 具有关闭所提供的 Socket 的权限,必须将ownsSocket 参数的值指定为 true。将 Write 和 Read 方法用于简单的单线程同步阻止 I/O。 若要使用不同的线程来处理 I/O,则请考虑使用 BeginWrite 和 EndWrite 方法,或 BeginRead 和 EndRead 方法进行通信。NetworkStream 不支持对网络数据流的随机访问。 CanSeek 属性用于指示流是否支持查找,它的值始终为 false;读取 Position 属性、读取 Length 属性或者调用 Seek 方法都会引发 NotSupportedException。可以对 NetworkStream 类的实例同时执行读和写操作而无需同步。 只要写操作有一个唯一线程,读操作有一个唯一线程,则读和写线程之间不会存在交叉引用,因而无需同步。
BeginRead 方法将启动从传入网络缓冲区异步读取数据的操作。 调用 BeginRead 方法将使您能够在单独的执行线程中接收数据。必须创建实现 AsyncCallback 委托的回调方法,并将其名称传递给 BeginRead 方法。 state 参数必须至少包含 NetworkStream。 由于您可能希望在回调方法内获得所接收的数据,因此应创建小型的类或结构来保存读取缓冲区以及其他任何有用信息。 通过 state 参数将结构或类实例传递给 BeginRead 方法。
我在线程中使用Read,发现当没有数据进来的时候,设置断点了也不会触发断点,代码中也没有使用DataAvailable,也没有sleep,居然不会独占CPU,这也使我不解,待继续研究。