注:不是原创!
【程序编程相关:用 .NET 开发的轻量级 UI 测试自】
【推荐阅读:Extended web browser】
tcpclient . udpclient与tcplistener,而不是直接向 socket 中写.它们之间的这种层次关系示意如下: 【扩展信息:TreeView 控件树状控件的填充VB】
前一篇«visual c#.net网络程序开发之socket»中说到:支持http.tcp与udp的类组成了tcp/ip三层模型(请求响应层.应用协议层.传输层)的中间层-应用协议层,该层的类比位于最底层的socket类提供了更高层次的抽象,它们封装 tcp 与 udp 套接字的创建,不需要处理连接的细节,这使得我们在编写套接字级别的协议时,可以更多地尝试使用
可见,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端口均指的是远程服务器.
... 下一页