NetworkStream 在Socket编程中的使用

本文详细介绍了.NET中NetworkStream类的使用,包括在同步和异步模式下的数据传输,Socket连接管理,以及如何处理I/O操作。实例演示了如何创建、读写和关闭NetworkStream,特别关注了阻塞与非阻塞模式的区别和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容摘自vs帮助的备注:

NetworkStream 类提供在阻止模式下通过 Stream 套接字发送和接收数据的方法。 有关阻止与非阻止 Socket 的更多信息,请参见 使用异步客户端存储。 可以在同步和异步数据传输时使用 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 类的实例同时执行读和写操作而无需同步。 只要写操作有一个唯一线程,读操作有一个唯一线程,则读和写线程之间不会存在交叉引用,因而无需同步。

使用的一个例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;

namespace Client003
{
    public class TcpTimeClient
    {
        private const int portNum = 13;
        private const string hostName = "host.contoso.com";

        public static int Main(String[] args)
        {
            try
            {
                var client = new TcpClient("127.0.0.1", 5000);
                NetworkStream ns = client.GetStream();
                byte[] bytes = new byte[1024];
                int bytesRead = ns.Read(bytes, 0, bytes.Length);

                Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRead));

                string str = "123456789abcdefghijklmnopqrst";

                byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
                ns.Write(byteArray, 0, byteArray.Length );
                client.Close();
                ns.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return 0;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值