以下内容摘自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;
}
}
}