C#.Net网络程序开发基础之Socket篇.docx

上传人:桔**** 文档编号:545601979 上传时间:2022-09-21 格式:DOCX 页数:10 大小:15.93KB
返回 下载 相关 举报
C#.Net网络程序开发基础之Socket篇.docx_第1页
第1页 / 共10页
C#.Net网络程序开发基础之Socket篇.docx_第2页
第2页 / 共10页
C#.Net网络程序开发基础之Socket篇.docx_第3页
第3页 / 共10页
C#.Net网络程序开发基础之Socket篇.docx_第4页
第4页 / 共10页
C#.Net网络程序开发基础之Socket篇.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C#.Net网络程序开发基础之Socket篇.docx》由会员分享,可在线阅读,更多相关《C#.Net网络程序开发基础之Socket篇.docx(10页珍藏版)》请在金锄头文库上搜索。

1、 C#.Net网络程序开发基础之Socket篇抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的规律层面上看,.Net类可以视为包含3个层次:恳求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了恳求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于传输层。传输层位于这个构造的最底层,当其上面的应用协议层和恳求/响应层不能满意应用程序的特别需要时,就需要使用这一层进展Socket套接字编程。而在.Net中,System.Net.Sockets 命名空间为需要严密掌握网络访问的开发人员供应了 Windows Sockets (

2、Winsock) 接口的托管实现。System.Net 命名空间中的全部其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener 和 UDPClient 类封装有关创立到 Internet 的 TCP 和 UDP 连接的具体信息;NetworkStream类则供应用于网络访问的根底数据流等,常见的很多Internet效劳都可以见到Socket的踪影,如Telnet、Http、Email、Echo等,这些效劳尽管通讯协议Protocol的定义不同,但是其根底的传输都是采纳的Socket。其实,Socket可以象流Stream一样被视为一个数据通道,这个通道

3、架设在应用程序端(客户端)和远程效劳器端之间,而后,数据的读取(接收)和写入(发送)均针对这个通道来进展。可见,在应用程序端或者效劳器端创立了Socket对象之后,就可以使用Send/SentTo方法将数据发送到连接的Socket,或者使用Receive/ReceiveFrom方法接收来自连接Socket的数据;针对Socket编程,.NET 框架的 Socket 类是 Winsock32 API 供应的套接字效劳的托管代码版本。其中为实现网络编程供应了大量的方法,大多数状况下,Socket 类方法只是将数据封送到它们的本机 Win32 副本中并处理任何必要的安全检查。假如你熟识Winsock

4、 API函数,那么用Socket类编写网络程序会特别简单,固然,假如你不曾接触过,也不会太困难,跟随下面的讲解,你会觉察使用Socket类开发windows 网络应用程序原来有规可寻,它们在大多数状况下遵循大致一样的步骤。在使用之前,你需要首先创立Socket对象的实例,这可以通过Socket类的构造方法来实现:public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);其中,addressFamily 参数指定 Socket 使用的寻址方案,socketType 参数指定

5、 Socket 的类型,protocolType 参数指定 Socket 使用的协议。下面的例如语句创立一个 Socket,它可用于在基于 TCP/IP 的网络(如 Internet)上通讯。Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);若要使用 UDP 而不是 TCP,需要更改协议类型,如下面的例如所示:Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.U

6、dp);一旦创立 Socket,在客户端,你将可以通过Connect方法连接到指定的效劳器,并通过Send/SendTo方法向远程效劳器发送数据,而后可以通过Receive/ReceiveFrom从效劳端接收数据;而在效劳器端,你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,并通过Listen方法侦听该接口上的恳求,当侦听到用户端的连接时,调用Accept完成连接的操作,创立新的Socket以处理传入的连接恳求。使用完 Socket 后,记住使用 Shutdown 方法禁用 Socket,并使用 Close 方法关闭 Socket。其间用到的方法/函数有:Socket

7、.Connect方法:建立到远程设备的连接public void Connect(EndPoint remoteEP)(有重载方法)Socket.Send 方法:从数据中的指示位置开头将数据发送到连接的 Socket。public int Send(byte, int, SocketFlags);(有重载方法)Socket.SendTo 方法 将数据发送到特定终结点。public int SendTo(byte, EndPoint);(有重载方法)Socket.Receive方法:将数据从连接的 Socket 接收到接收缓冲区的特定位置。public int Receive(byte,int,

8、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 以处理传入的连接恳求。publi

9、c Socket Accept();Socket.Shutdown方法:禁用某 Socket 上的发送和接收public void Shutdown( SocketShutdown how );Socket.Close方法:强制 Socket 连接关闭public void Close();可以看出,以上很多方法包含EndPoint类型的参数,在Internet中,TCP/IP 使用一个网络地址和一个效劳端口号来标识设备。网络地址标识网络上的特定设备;端口号标识要连接到的该设备上的特定效劳。网络地址和效劳端口的组合称为终结点,在 .NET 框架中正是由 EndPoint 类表示这个终结点,它供

10、应表示网络资源或效劳的抽象,用以标志网络地址等信息。.Net同时也为每个受支持的地址族定义了 EndPoint 的子代;对于 IP 地址族,该类为 IPEndPoint。IPEndPoint 类包含应用程序连接到主机上的效劳所需的主机和端口信息,通过组合效劳的主机IP地址和端口号,IPEndPoint 类形成到效劳的连接点。用到IPEndPoint类的时候就不行避开地涉及到计算机IP地址,.Net中有两种类可以得到IP地址实例:IPAddress类:IPAddress 类包含计算机在 IP 网络上的地址。其Parse方法可将 IP 地址字符串转换为 IPAddress 实例。下面的语句创立一个

11、 IPAddress 实例:IPAddress myIP = IPAddress.Parse(“192.168.1.2“);Dns 类:向使用 TCP/IP Internet 效劳的应用程序供应域名效劳。其Resolve 方法查询 DNS 效劳器以将用户友好的域名(如““)映射到数字形式的 Internet 地址(如 192.168.1.1)。Resolve方法 返回一个 IPHostEnty 实例,该实例包含所恳求名称的地址和别名的列表。大多数状况下,可以使用 AddressList 数组中返回的第一个地址。下面的代码猎取一个 IPAddress 实例,该实例包含效劳器 的 IP 地址。I

12、PHostEntry ipHostInfo = Dns.Resolve(““);IPAddress ipAddress = ipHostInfo.AddressList0;你也可以使用GetHostName方法得到IPHostEntry实例:IPHosntEntry hostInfo=Dns.GetHostByName(““)在使用以上方法时,你将可能需要处理以下几种特别:SocketException特别:访问Socket时操作系统发生错误引发ArgumentNullException特别:参数为空引用引发ObjectDisposedException特别:Socket已经关闭引发在把握上面

13、得学问后,下面的代码将该效劳器主机( 的 IP 地址与端口号组合,以便为连接创立远程终结点:IPEndPoint ipe = new IPEndPoint(ipAddress,11000);确定了远程设备的地址并选择了用于连接的端口后,应用程序可以尝试建立与远程设备的连接。下面的例如使用现有的 IPEndPoint 实例与远程设备连接,并捕获可能引发的特别:try s.Connect(ipe);/尝试连接/处理参数为空引用特别catch(ArgumentNullException ae) Console.WriteLine(“ArgumentNullException : 0“, ae.ToS

14、tring();/处理操作系统特别catch(SocketException se) Console.WriteLine(“SocketException : 0“, se.ToString();catch(Exception e) Console.WriteLine(“Unexpected exception : 0“, e.ToString();需要知道的是:Socket 类支持两种根本模式:同步和异步。其区分在于:在同步模式中,对执行网络操作的函数(如 Send 和 Receive)的调用始终等到操作完成后才将掌握返回给调用程序。在异步模式中,这些调用马上返回。另外,许多时候,Socket编程视状况不同需要在客户端和效劳器端分别予以实现,在客户端编制应用程序向效劳端指定端口发送恳求,同时编制效劳端应用程序处理该恳求,这个过程在上面的阐述中已经提及;固然,并非全部的Socket编程都需要你严格编写这两端程序;视应用状况不同,你可以在客户端构造出恳求字符串,效劳器相应端口捕获这个恳求,交由其公用效劳程序进展处理。以下事例语句中的字符串就向远程主机提出页面恳求:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号