NetworkStream Class

命名空间:

System.Net.Sockets

Assemblies:

System.Net.Sockets.dll, System.dll, netstandard.dll

为网络访问提供数据的基础流。

public class NetworkStream : System.IO.Stream

继承

Object 
MarshalByRefObject   
Stream
NetworkStream

示例

下面的代码示例演示如何创建NetworkStream从连接StreamSocket并执行基本的同步阻塞 I/O

// Examples for constructors that do not specify file permission.

// Create the NetworkStream for communicating with the remote host.
NetworkStream myNetworkStream;

if (networkStreamOwnsSocket){
     myNetworkStream = new NetworkStream(mySocket, true);          
}
else{
     myNetworkStream = new NetworkStream(mySocket);     
}

注解
NetworkStream类提供了用于通过发送和接收数据的方法Stream处于阻止模式套接字。 有关详细信息,有关阻止与非阻止性Sockets,请参阅使用异步客户端套接字。 可以使用NetworkStream的这两个同步和异步数据传输类。 有关同步和异步通信的详细信息,请参阅套接字。

若要创建NetworkStream,则必须提供连接Socket。 此外可以指定哪些FileAccess权限NetworkStream通过提供具有Socket。 默认情况下,关闭NetworkStream不会关闭所提供Socket。 如果你想NetworkStream能够关闭所提供的权限Socket,则必须指定true的值的ownsSocket参数。

使用WriteRead方法用于简单的单线程同步阻塞 I/O。 如果你想要处理 I/O 使用单独的线程,请考虑使用BeginWriteEndWrite方法,或BeginReadEndRead方法进行通信。

NetworkStream不支持对网络数据流的随机访问。 值CanSeek属性,用于指示流是否支持查找,始终是false; 读取Position属性,读取Length属性或调用Seek方法将引发NotSupportedException.

读取和写入操作可以同时执行的实例上NetworkStream类,而无需同步。 只要没有个写入操作的一个唯一线程和读取操作的一个唯一的线程,读取之间将存在交叉引用和写线程并没有进行的同步不需要。

构造函数

名称说明
NetworkStream(Socket)为指定的 Socket 创建 NetworkStream 类的新实例。
NetworkStream(Socket, Boolean)用指定的 Socket 所属权为指定的 Socket 初始化 NetworkStream 类的新实例。
NetworkStream(Socket, FileAccess)用指定的访问权限为指定的 NetworkStream 创建 Socket 类的新实例。
NetworkStream(Socket, FileAccess, Boolean)用指定的访问权限和指定的 Socket 所属权为指定的 Socket 创建 NetworkStream 类的新实例。

属性

名称说明
CanRead获取一个值,该值指示 NetworkStream 是否支持读取。
CanSeek获取一个值,该值指示流是否支持查找。 当前不支持此属性,它始终返回 false。
CanTimeout指示超时属性是否可用于 NetworkStream。
CanWrite获取一个值,该值指示 NetworkStream 是否支持写入。
DataAvailable获取一个值,该值指示在要读取的 NetworkStream 上是否有可用的数据。
Length获取流上可用数据的长度。 此属性当前不受支持,总是引发 NotSupportedException。
Position获取或设置流中的当前位置。 此属性当前不受支持,总是引发 NotSupportedException。
Readable获取或设置一个值,该值指示 NetworkStream 是否可以读取。
ReadTimeout获取或设置读取操作阻止等待数据的时间。
Socket获取基础 Socket。
Writeable获取一个值,该值指示 NetworkStream 是否可写入数据。
WriteTimeout获取或设置写入操作阻止等待数据的时间。

方法

名称说明
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)从 NetworkStream 开始异步读取。
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)开始向流异步写入。
Close(Int32)等待指定的时间获许发送数据之后,关闭 NetworkStream。
CopyTo(Stream)从当前流中读取字节并将其写入到另一流中。
(Inherited from Stream)
CopyTo(Stream, Int32)使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中。
(Inherited from Stream)
CopyToAsync(Stream)从当前流中异步读取字节并将其写入到另一个流中。
(Inherited from Stream)
CopyToAsync(Stream, Int32)使用指定的缓冲区大小,从当前流中异步读取字节并将其写入到另一流中。
(Inherited from Stream)
CopyToAsync(Stream, Int32, CancellationToken)使用指定的缓冲区大小和取消令牌,从当前流中异步读取字节并将其写入到另一个流中。
(Inherited from Stream)
CreateObjRef(Type)创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。
(Inherited from MarshalByRefObject)
CreateWaitHandle()分配 WaitHandle 对象。
(Inherited from Stream)
Dispose()释放由 Stream 使用的所有资源。
(Inherited from Stream)
Dispose(Boolean)释放由 NetworkStream 占用的非托管资源,还可以另外再释放托管资源。
EndRead(IAsyncResult)处理异步读取的结束。
EndWrite(IAsyncResult)处理异步写入的结束。
Equals(Object)确定指定的对象是否等于当前对象。
(Inherited from Object)
Finalize()释放由 NetworkStream 使用的所有资源。
Flush()刷新流中的数据。 此方法保留供将来使用。
FlushAsync()异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中。
(Inherited from Stream)
FlushAsync(CancellationToken)以异步操作形式刷新流中的数据。
GetHashCode()作为默认哈希函数。
(Inherited from Object)
GetLifetimeService()检索控制此实例的生存期策略的当前生存期服务对象。
(Inherited from MarshalByRefObject)
GetType()获取当前实例的 Type。
(Inherited from Object)
InitializeLifetimeService()获取生存期服务对象来控制此实例的生存期策略。
(Inherited from MarshalByRefObject)
MemberwiseClone()创建当前 Object 的浅表副本。
(Inherited from Object)
MemberwiseClone(Boolean)创建当前 MarshalByRefObject 对象的浅表副本。
(Inherited from MarshalByRefObject)
ObjectInvariant()提供对 Contract 的支持。
(Inherited from Stream)
Read(Byte[], Int32, Int32)从 NetworkStream 读取数据。
ReadAsync(Byte[], Int32, Int32)从当前流异步读取字节序列,并将流中的位置提升读取的字节数。
(Inherited from Stream)
Seek(Int64, SeekOrigin)将流的当前位置设置为给定值。 此方法当前不受支持,总是引发 NotSupportedException。
SetLength(Int64)设置流的长度。 此方法始终引发 NotSupportedException。
ToString()返回表示当前对象的字符串。
(Inherited from Object)
Write(Byte[], Int32, Int32)将数据写入 NetworkStream。
WriteAsync(Byte[], Int32, Int32)将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。
(Inherited from Stream)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用C#传输文件,您可以使用TCP协议。以下是基本的C#代码示例,用于将文件从客户端发送到服务器。 客户端代码: ```csharp using System; using System.IO; using System.Net.Sockets; class Program { static void Main(string[] args) { // 创建TCP客户端 TcpClient client = new TcpClient("127.0.0.1", 9999); // 打开文件 FileStream fileStream = File.OpenRead(@"C:\test.txt"); // 创建网络流 NetworkStream networkStream = client.GetStream(); // 读取文件并发送给服务器 byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0) { networkStream.Write(buffer, 0, bytesRead); } // 关闭网络流和文件流 networkStream.Close(); fileStream.Close(); // 关闭TCP客户端 client.Close(); } } ``` 服务器端代码: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; class Program { static void Main(string[] args) { // 创建TCP服务器 TcpListener listener = new TcpListener(IPAddress.Any, 9999); listener.Start(); // 等待客户端连接 TcpClient client = listener.AcceptTcpClient(); // 创建网络流 NetworkStream networkStream = client.GetStream(); // 创建文件流 FileStream fileStream = File.Create(@"C:\test_server.txt"); // 接收客户端发送的文件并写入本地文件 byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0) { fileStream.Write(buffer, 0, bytesRead); } // 关闭网络流和文件流 networkStream.Close(); fileStream.Close(); // 关闭TCP服务器 listener.Stop(); } } ``` 请注意,此示例只用于演示如何传输文件。在实际应用程序中,您可能需要添加更多的错误处理和安全检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值