Visual C#.Net网络程序开发-Tcp篇(1)

Visual C#.Net 网络程序开发-Tcp 篇(1) 前一篇《Visual C#.Net 网络程序开发-Socket 篇》中说到:支持 Http,Tcp 和 Udp 的类组成 了 TCP/IP 三层模型(请求响应层,应用协议层,传输层)的中间层-应用协议层,该层的类比 位于最底层的 Socket 类提供了更高层次的抽象, 它们封装 TCP 和 UDP 套接字的创建, 不 需要处理连接的细节,这使得我们在编写套接字级别的协议时,可以更多地尝试使用 TCPClient , UDPClient 和 TcpListener,而不是直接向 Socket 中写.它们之间的这种层次 关系示意如下:

可见, TcpClient 类基于 Socket 类构建,这是它能够以更高的抽象程度提供 TCP 服务 的基础.正因为这样,许多应用层上的通讯协议,比如 FTP(File Transfers Protocol)文件传输 协议,HTTP(Hypertext Transfers Protocol)超文本传输协议等都直接创建在 TcpClient 等类之 上. TCPClient 类使用 TCP 从 Internet 资源请求数据.TCP 协议建立与远程终结点的连接, 然后使用此连接发送和接收数据包.TCP 负责确保将数据包发送到终结点并在数据包到达 时以正确的顺序对其进行组合. 从名字上就可以看出, TcpClient 类专为客户端设计, 它为 TCP 网络服务提供客户端连接. TcpClient 提供了通过网络连接,发送和接收数据的简单方法. 若要建立 TCP 连接,必须知道承载所需服务的网络设备的地址(IPAddress)以及该服务用 于通讯的 TCP 端口 (Port).Internet 分配号码机构 (Internet Assigned Numbers Authority, IANA) 定义公共服务的端口号(你可以访问 http://www.iana.org/assignments/port-numbers 获得这方面更详细的资料) .IANA 列表中所没有的服务可使用 1,024 到 65,535 这一范围 中的端口号.要创建这种连接,你可以选用 TcpClient 类的三种构造函数之一: 1,public TcpClient()当使用这种不带任何参数的构造函数时,将使用本机默认的 ip 地址 并将使用默认的通信端口号 0.这样情况下,如果本机不止一个 ip 地址,将无法选择使用. 以下语句示例了如何使用默认构造函数来创建新的 TcpClient:

TcpClient tcpClientC = new TcpClient();

2, public TcpClient(IPEndPoint)使用本机 IPEndPoint 创建 TcpClient 的实例对象. 上一篇介 绍过了,IPEndPoint 将网络端点表示为 IP 地址和端口号,在这里它用于指定在建立远程主 机连接时所使用的本地网络接口(IP 地址)和端口号,这个构造方法为使用本机 IPAddress 和 Port 提供了选择余地.下面的语句示例了如何使用本地终结点创建 TcpClient 类的实例: IPHostEntry ipInfo=Dns.GetHostByName("www.tuha.net");//主机信息 IPAddressList[] ipList=ipInfo.AddressList;//IP 地址数组 IPAddress ip=ipList[0];//多 IP 地址时一般用第一个 IPEndPoint ipEP=new IPEndPoint(ip,4088);//得到网络终结点 try{ TcpClient tcpClientA = new TcpClient(ipLocalEndPoint); } catch (Exception e ) { Console.WriteLine(e.ToString()); }

到这里,你可能会感到困惑,客户端要和服务端创建连接,所指定的 IP 地址及通信端口 号应该是远程服务器的呀!事实上的确如此,使用以上两种构造函数,你所实现的只是 TcpClient 实例对象与 IP 地址和 Port 端口的绑定,要完成连接,你还需要显式指定与远程主 机的连接,这可以通过 TcpClient 类的 Connect 方法来实现, Connet 方法使用指定的主机名 和端口号将客户端连接到 远程主机: 1),public void Connect(IPEndPoint); 使用指定的远程网络终结点将客户端连接到远程 TCP 主机. public void Connect(IPAddress, int); 使用指定的 IP 地址和端口号将客户端连接到 TCP 主机. public void Connect(string, int); 将客户端连接到指定主机上的指定端口. 需要指出的是,Connect 方法的所有重载形式中的参数 IPEndPoint 网络终 结点, 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()); }


相关文档

  • Visual C#.Net网络程序开发-Tcp篇
  • Visual C#.Net网络程序开发-Tcp篇(3)
  • Visual C#.Net网络程序开发-Tcp篇(2)
  • C#.Net网络程序开发-Tcp篇
  • Visual C#.Net网络程序开发
  • Visual C#.Net 网络程序开发-Socket篇
  • Visual C#.NET程序开发
  • Visual C#.Net 网络程序开发-Socket
  • 3VISUAL C#.NET网络程序开发 TCP篇
  • 电脑版