结点、IPAddress以及表现为string的Dns主机名和int指出的Port端口均指的是远程服务器。
以下示例语句使用主机默认IP和Port端口号0与远程主机建立连接:
TcpClient tcpClient = new TcpClient();//创建TcpClient对象实例
try{
tcpClient.Connect("www.contoso.com",11002);//建立连接
}
catch (Exception e ){
Console.WriteLine(e.ToString());
}
3、public TcpClient(string, int);初始化 TcpClient 类的新实例并连接到指定主机上的指定端口。与前两个构造函数不一样,这个构造函数将自动建立连接,你不再需要额外调用Connect方法,其中string类型的参数表示远程主机的Dns名,如:www.tuha.net。
以下示例语句调用这一方法实现与指定主机名和端口号的主机相连:
try{
TcpClient tcpClientB = new TcpClient("www.tuha.net", 4088);
}
catch (Exception e ) {
Console.WriteLine(e.ToString());
}
前面我们说,TcpClient类创建在Socket之上,在Tcp服务方面提供了更高层次的抽象,体现在网络数据的发送和接受方面,是TcpClient使用标准的Stream流处理技术,使得它读写数据更加方便直观,同时,.Net框架负责提供更丰富的结构来处理流,贯穿于整个.Net框架中的流具有更广泛的兼容性,构建在更一般化的流操作上的通用方法使我们不再需要困惑于文件的实际内容(HTML、XML 或其他任何内容),应用程序都将使用一致的方法(Stream.Write、Stream.Read) 发送和接收数据。另外,流在数据从 Internet 下载的过程中提供对数据的即时访问,可以在部分数据到达时立即开始处理,而不需要等待应用
程序下载完整个数据集。.Net中通过NetworkStream类实现了这些处理技术。
NetworkStream 类包含在.Net框架的System.Net.Sockets 命名空间里,该类专门提供用于网络访问的基础数据流。NetworkStream 实现通过网络套接字发送和接收数据的标准.Net 框架流机制。NetworkStream 支持对网络数据流的同步和异步访问。NetworkStream 从 Stream 继承,后者提供了一组丰富的用于方便网络通讯的方法和属性。
同其它继承自抽象基类Stream的所有流一样,NetworkStream网络流也可以被视为一个数据通道,架设在数据来源端(客户Client)和接收端(服务Server)之间,而后的数据读取及写入均针对这个通道来进行。
.Net框架中,NetworkStream流支持两方面的操作:
1、 写入流。写入是从数据结构到流的数据传输。
示 意 图
2、读取流。读取是从流到数据结构(如字节数组)的数据传输。
示 意 图
与普通流Stream不同的是,网络流没有当前位置的统一概念,因此不支持查找和对数据流的随机访问。相应属性CanSeek 始终返回 false,而 Seek 和 Position 方法也将引发 NotSupportedException。
基于Socket上的应用协议方面,你可以通过以下两种方式获取NetworkStream网络数据流:
1、使用NetworkStream构造函数:public NetworkStream(Socket, FileAccess, bool);(有重载方法),它用指定的访问权限和指定的 Socket 所属权为指定的 Socket 创建 NetworkStream 类的新实例,使用前你需要创建Socket对象实例,并通过Socket.Connect方法建立与远程服务端的连接,而后才可以使用该方法得到网络传输流。示例如下:
Socket s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//创建客户端Socket对象实例
try{
s.Connect("www.tuha.net",4088);//建立与远程主机的连接
}
catch(Exception e){
MessageBox.show("连接错误:" +e.Message);
}
try{
NetworkStream stream=new NetworkStream(s,FileAccess.ReadWrite,false);//取得网络传输流
}
2、通过TcpClient.GetStream方法:public NetworkStream etStream();它返