Socket.SendTo 方法 将数据发送到特定终结点。 public int SendTo(byte[], EndPoint);(有重载方法) Socket.Receive方法:将数据从连接的 Socket 接收到接收缓冲区的特定位置。 public int Receive(byte[],int,SocketFlags); Socket.ReceiveFrom方法:接收数据缓冲区中特定位置的数据并存储终结点。 public int ReceiveFrom(byte[], int, SocketFlags, ref EndPoint); Socket.Bind 方法:使 Socket 与一个本地终结点相关联: public void Bind( EndPoint localEP ); Socket.Listen方法:将 Socket 置于侦听状态。 public void Listen( int backlog ); Socket.Accept方法:创建新的 Socket 以处理传入的连接请求。 public Socket Accept(); Socket.Shutdown方法:禁用某 Socket 上的发送和接收 public void Shutdown( SocketShutdown how ); Socket.Close方法:强制 Socket 连接关闭 public void Close(); 可以看出,以上许多方法包含EndPoint类型的参数,在Internet中,TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备;端口号标识要连接到的该设备上的特定服务。网络地址和服务端口的组合称为终结点,在 .NET 框架中正是由 EndPoint 类表示这个终结点,它提供表示网络资源或服务的抽象,用以标志网络地址等信息。.Net同时也为每个受支持的地址族定义了 EndPoint 的子代;对于 IP 地址族,该类为 IPEndPoint。IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和端口信息,通过组合服务的主机IP地址和端口号,IPEndPoint 类形成到服务的连接点。 用到IPEndPoint类的时候就不可避免地涉及到计算机IP地址,.Net中有两种类可以得到IP地址实例: IPAddress类:IPAddress 类包含计算机在 IP 网络上的地址。其Parse方法可将 IP 地址字符串转换为 IPAddress 实例。下面的语句创建一个 IPAddress 实例: IPAddress myIP = IPAddress.Parse("192.168.1.2"); Dns 类:向使用 TCP/IP Internet 服务的应用程序提供域名服务。其Resolve 方法查询 DNS 服务器以将用户友好的域名(如"host.contoso.com")映射到数字形式的 Internet 地址(如 192.168.1.1)。Resolve方法 返回一个 IPHostEnty 实例,该实例包含所请求名称的地址和别名的列表。大多数情况下,可以使用 AddressList 数组中返回的第一个地址。下面的代码获取一个 IPAddress 实例,该实例包含服务器 host.contoso.com 的 IP 地址。 IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com"); IPAddress ipAddress = ipHostInfo.AddressList[0]; 你也可以使用GetHostName方法得到IPHostEntry实例: IPHosntEntry hostInfo=Dns.GetHostByName("host.contoso.com") 在使用以上方法时,你将可能需要处理以下几种异常: SocketException异常:访问Socket时操作系统发生错误引发 ArgumentNullException异常:参数为空引用引发 ObjectDisposedException异常:Socket已经关闭引发 在掌握上面得知识后,下面的代码将该服务器主机( host.contoso.com的 IP 地址与端口号组合,以便为连接创建远程终结点: IPEndPoint ipe = new IPEndPoint(ipAddress,11000); 确定了远程设备的地址并选择了用于连接的端口后,应用程序可以尝试建立与远程设备的连接。下面的示例使用现有的 IPEndPoint 实例与远程设备连接,并捕获可能引发的异常: try { s.Connect(ipe);//尝试连接 } //处理参数为空引用异常 catch(ArgumentNullException ae) { Console.WriteLine("ArgumentNullException : {0}", ae.ToString()); |