《Socket网络编程.pdf》由会员分享,可在线阅读,更多相关《Socket网络编程.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于基于 Socket的网络编程的网络编程Socket 又称为套接字,是采用客户/服务器模型设计的网络通信接口。Socket 接口最早使用在Unix 系统中,Windows 提供的Socket 通信称为WinSock,目前存在v1.1版本(被封装在WinSock.dll 动态链接库文件中)和v2.0版本(被封装在 WS2_32.dll动态链接库文件中)。v1.1版本是针对 Internet而设计的,在 v2.0版本中已经不再局限于TCP/IP 协议,而是根据Microsoft 提出的Windows 开放系统架构(Windows Open System Architecture,WOSA)模型,
2、定义了一个标准服务提供接口(Standard Service Provider Interface,SPI)。通过 SPI 编程接口,WinSock 的应用范围扩大到绝大部分的网络和协议。.NET Framework 在System.Net.Sockets 名空间提供了对WinSock 的托管封装,提供Socket、TcpListener、TcpClient、UdpClient 以及NetworkStream 等类来实现Socket网络通信。类类说明说明Socket对WinSock 的封装和扩展TcpListener封装使用TCP 协议进行网络侦听的SocketTcpClient封装使用TCP
3、 协议进行网络通信的SocketUdpClient封装使用UDP 协议进行网络通信的SocketNetworkStream使用流的概念封装网络通信的数据在这些类中,Socket 类为核心类,它提供了使用 WinSock 进行网络通信的基本功能。一、网络编程概念一、网络编程概念网络中主机间的通信是通过网络协议实现的。目前,存在两种网络通信协议模型:开放系统互连(Open System Interconnection,OSI)参考模型和 TCP/IP 模型。1、OSI 参考模型参考模型OSI 参考模型是一个多层通信协议模型,所谓开放是指允许任意两个具有不同基本体系结构的系统进行通信的一套协议族。O
4、SI 参考模型最初是由国际化标准组织(International Standard Organization,ISO)开发,1983年成为国际标准。OSI 参考模型将网络划分成7 层,从上之下分别是:应用层(Application Layer)、表示层(Presentation Layer)、会话层(Session Layer)、传输层(Transport Layer)、网络层(Network Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。其中,每一层只与其上下两层直接通信,高层协议偏重于处理用户服务和各种应用请求,底层协议注重于处理实际的
5、信息传输。分层的目的是在于将各种特定的功能分离,并使其实现对其他层来说是透明且相互独立的。下图描述了一个包含通信子网的 OSI 网络通信模型。(1)物理层物理层定义了与物理介质的连接机制,而不是物理介质本身。按照OSI 模型,物理层在物理介质之上,它提供以比特(Bit)为单位形成比特流来传送来自数据链路层的数据,而不理会数据的格式和含义,同样,当接受数据(比特流)时也不加分析直接传送到数据链路层。即对二进制数据(比特)进行编码(发送到物理介质上)和解码(从物理介质上接受)。如:以太网的曼切斯特编码,光纤分布式接口(Fiber Distributed Data Interface,FDDI)的4
6、B5B 编码。物理层也负责通知数据链路层何时访问介质,如以太网的载波监听功能。此外,在某种程度上,物理层也包含连接策略,主要有:电路交换、报文交换和分组交换。(2)数据链路层数据链路层也称为链路控制层(Data Link Control Layer,DLC),负责管理数据格式、链路的管理、相邻网络节点的信息流动以及流量控制。在数据链路层中,数据常以帧(Frame)为单位进行传输,帧通常是由包含起始标志的报头或报头位、寻址信息、循环冗余码(Cyclic Redundancy Check,CRC)组成。循环冗余码用来保证帧在传输过程中的完整性,将无错的帧发送到网络层。OSI 模型中的数据链路层与电
7、气与电子工程师协会(Institute of Electrical and Electronic Engineers,IEEE)定义的有所不同。IEEE定义的数据链路层包含逻辑链路控制(Logical Link Control Layer,LLC)和介质访问控制(Media Access Control Layer,MAC)。MAC 层基本对应OSI 模型中的数据链路层,LLC 层主要提供可靠的面向连接服务与无连接的数据报服务,ISO 在这之上提供了两种网络层服务,即面向连接的网络服务和无连接的网络服务。(3)网络层网络层提供跨越多个网络的路由和寻址功能,使两个终端系统能够以最佳路径进行互连,
8、并具有一定的堵塞控制和流量控制能力。在网络层中,通常以数据包(Packet)为单位传输数据。在数据包中可以包含一个16 位的校验和,但这个校验和可能只能保证网络层包头的信息,而不能保证数据包信息。如:IP协议(Internet Protocol)。网络层的端到端寻址独立于数据链路层,网络层的寻址由网络标识附加主机标识组成。主机标识指明网络或子网中的一个节点;网络标识可能是子网化的 IP,单调的IPX(Internet Packet Exchange),也可能是层次化的DECnet(Digital Equipment Corporations net)。路由信息协议(Routing Inform
9、ation Protocol,RIP),或开放式最短路径优先(Open Shortest Path First,OSPF)这些协议将有关网络标识的信息广播到其他路由器,以便可以转发相应的数据包。在网络维护中,所使用的 Ping 指令是在应用层直接使用网络层的ICMP 协议(Internet Control Message Protocol)的服务指令。(4)传输层传输层是一个过渡性层次,在其下3层主要处理网络通信,发送方和接收方之间的每个节点都必须执行下3 层的协议,确保数据被准确有效地传输;在传输层及其上3层主要为用户提供服务,工作于发送节点和接受节点之上,确保数据被正确接受,并答复发送节点
10、。传输层在两个通信系统之间建立一条通信链路,允许其上3层不受实际网络结构的约束执行各自的任务,同时依靠其下3 层控制实际的网络操作,监督数据从源节点出发,最终到达目标节点。传输层还处理一些由网络层引起的错误,如包丢失、重复包等等,同时还可以对包进行重新排序、分段(用于传输大的报文)和重装,这有助于在网络发生拥塞时降低发送数据的速率。此外,传输层还包括多路复用、连接管理等。(5)会话层会话层提供命名服务,实现逻辑名到网络地址的映射;允许不同主机上的应用程序进行会话或建立虚连接;为丢失的连接事件提供检查。会话层使用逻辑名或别名建立会话,通常在会话建立之后在数据报中嵌入会话标志。不同系列的协议都提供
11、查找与地址相关逻辑名的方法,如:TCP/IP 协议族使用域名服务系统(Domain Name System,DNS),IPX/SPX 采用NetWare 服务广播协议(Service Advertising Protocol,SAP)。会话层协议还包括 NetBIOS(Network Basic Input and Output Service)、远程过程调用(Remote Procedure Call,RPC)等。(6)表示层表示层用于解决信息与数据的区别。数据是信息的载体,信息是人为赋予的含义,在计算机中表示的比特位不能表达其内容,并且不同计算机表示相同信息的方式各不相同。表示层管理抽象的
12、数据结构,定义数据的语法和语义,提供数据压缩、解压、加密、解密等服务,在必要时可以对应用层的数据进行转换。(7)应用层应用层直接与用户或应用程序通信,它通过Shell 或转向器(Redirector)机制来支持本地操作系统。它将文件、打印和消息服务的 API(Application Programming Interface,应用程序接口)转换成通用语言,如:Windows 系统中的服务器消息块(Server Message Block,SMB),实现对不同操作系统的支持。典型的网络应用有 WWW服务、电子邮件、文件传输、虚拟终端、分布式系统等。在使用 OSI 的 7层模型进行数据传递过程中,
13、每一层都对网络数据流都加上报头进行重新封装或重组,其传递过程可用下图描述:2、TCP/IP 模型模型OSI 参考模型常作为理论模型,实际应用中使用的是TCP/IP 模型。TCP/IP 模型是事实上的工业标准模型。TCP/IP 代表一套工业标准协议套件,TCP 协议和IP 协议是其中最著名的协议,1969年由美国国防部高级研究计划局(Department of Defense Advanced Research Project Agency,DARPA)开发,最早应用在 ARPNET 上,现已形成广为人知的 Internet。TCP/IP 模型将网络划分成4个层次,与OSI 参考模型之间的关系可
14、用下图说明:(1)网络接口层网络接口层相当于 OSI 模型中的数据链路层和物理层。通常包含在操作系统的设备驱动程序和网络接口设备中,它们一起处理与物理介质的物理接口细节。(2)网际层(IP 层)网际层相当于 OSI 模型中的网络层,负责寻址、打包以及包转发机制。网络层协议主要包含互联网协议(Internet Protocol,IP)、互联网控制报文协议(Internet Control Message Protocol,ICMP)和互联网组管理协议(Internet Group Management Protocol,IGMP)。IP 协议是TCP/IP 协议族中核心协议,所有的TCP、UDP
15、、ICMP 以及 IGMP 数据都是以IP 数据包格式传输,它提供不可靠、无连接的数据包传送服务。这里的“不可靠”是指IP 协议不能保证IP 数据包能成功地传送到目标主机,IP 仅提供最好的传输服务,当发生传输错误时,IP 丢弃该数据包,发送 ICMP 消息报给发送数据的信源端;“无连接”是指IP 并不维护任何有关后续数据包的状态信息,每个数据包的处理是相对独立的,这也说明,IP 数据包可以不按发送顺序接受。ICMP 协议是面向连接的协议,用于在IP 主机、路由器间传送出错报告控制消息。提供诊断功能,报告由于IP 数据包投递失败而导致的错误。IGMP 协议是用于组播的协议,负责管理IP 组播,
16、将UDP 数据报发送给同组主机。这两个协议实际上应用到TCP 层协议的内容。在有些情况下,将地址解析协议(Address Resolution Protocol,ARP)和反向地址解析协议(Reverse Address Resolution Protocol,RARP)也认为是网际层的一部分。这是因为这两个协议使用到网际层的功能。ARP 协议通过广播方式将IP 地址翻译成对应的MAC 地址,与之对应的是RARP 协议,它实现将MAC 地址翻译成对应的IP 地址。(3)主机到主机的传输层(TCP 层)主机到主机的传输层相当于 OSI 模型中的传输层和部分会话层功能,它提供给应用层会话和数据报通
17、信服务,其核心协议为传输控制协议(Transmission Control Protocol,TCP)和用户数据报协议(User Datagram Protocol,UPD)。TCP 协议提供点到点的、面向连接的可靠通信服务,负责建立TCP 连接,对发送包进行编号和应答,并恢复在传输过程间丢失的包。UPD 协议提供点到点或点到对点、无连接的不可靠通信服务,通常用于传输少量数据。(4)应用层应用层负责处理特定的应用程序细节,为应用程序提供访问其他层的能力,定义应用程序用于交换数据的协议。常用的协议有:a)域名系统(Domain Name System,DNS),用于将主机名解析成IP 地址。b)
18、路由选择信息协议(Routing Information Protocol,RIP),用于路由器在IP 网络上交换路由选择信息。c)简单网络管理协议(Simple Network Management Protocol,SNMP),用于在网络管理控制台和网络设备(路由器、网桥、智能集线器)之间选择和交换网络管理信息。d)网络文件系统(Network File System,NFS),用于保证网络中的主机可共享文件。e)超文本传输协议(Hypertext Transfer Protocol,HTTP),用于传输组成Web网页的文件。f)文件传输协议(File Transfer Protocol,
19、FTP),用于交互式文件传输。g)简单邮件传输协议(Simple Mail Transfer Protocol,SMTP),用于传输邮件消息。h)终端仿真协议(Telnet),用于远程登录到网络主机。在 Windows 系统中,TCP/IP 应用程序使用的编程接口有Windows 套接字(WinSock)和NetBIOS。WinSock 是 Windows 系统提供的标准Socket 编程接口;NetBIOS 是工业标准接口,用于访问协议服务,如:会话、数据报和名字解析等。3、端口号、端口号在 TCP 协议和UDP 协议中采用16位的端口号标识服务器上可应用的服务,端口号的范围是从165535
20、。其中 11024是被RFC3232 规定,称作为“知名端口”(Well Known Ports);从102565535 的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。端口号主要用于服务器来区分服务类别和在同一时间进行多个会话。客户端通常并不关心它使用的端口号,只要保证在本机系统中是唯一的。一些常见的服务器知名端口号见下表。端口号端口号网络服务网络服务协议协议说明说明21FTPTCP文件传输服务23TelnetTCP远程登录服务25SMTPTCP接受电子邮件服务53DNSTCP域名服务80HTTPTCPWeb 服务器1080SOCKS 代
21、理TCPSOCKS 代理服务器137NetBIOSUDPWindows 系统中文件和打印共享使用4、Socket 编程模型编程模型使用 Socket 实现网络通信时,根据使用的通信协议包含面向连接的网路通信和无连接的网络通信两种形式。使用面向连接的网络通信时,其通信形式可用下图描述:无连接的网络通信形式见下图:5、客户、客户/服务器模型服务器模型在使用客户/服务器模型使用网络服务时,服务器有两种服务类型:重复型和并发型。重复型服务器使用如下步骤进行交互:(1)等待一个客户的请求到来;(2)处理客户请求;(3)发送响应信息给请求的客户;(4)返回第(1)步继续等待客户请求。在该服务模式中,服务器
22、在处理一个客户请求时,不能处理其他客户的请求。在使用Socket 编程时可以使用堵塞(同步)通信方式实现。并发型服务器使用以下步骤进行交互:(1)等待一个客户的请求到来;(2)启动一个新的服务器处理客户的请求,在这期间可能创建一个新的进程、任务或线程,并依赖操作系统的支持。该步骤如何进行取决于操作系统。新服务器处理完客户请求后,结束这个新的服务器。(3)返回第(1)步等待客户请求。并发型模型的优点是允许每个客户拥有自己的服务器,在多任务的操作系统中,可以同时为多个客户服务。在使用Socket 编程时可以使用非堵塞(异步)通信方式实现。二、创建二、创建SocketSocket 代表网络通信中的一
23、个端点,要创建一个 Socket实例,必须提供网络通信过程中的寻址方式、通信协议以及数据流类型。在 Socket 类中提供的构造方法签名为:Socket(AddressFamily family,SocketType streamType,ProtocolType protocol);1、寻址方式、寻址方式在.NET Framework 中,使用地址族表示不同网络协议在解析地址时的寻址方式,并将解析IP 地址时的寻址方式封装到System.Net.Sockets.AddressFamily 枚举类型。枚举枚举AddressFamily名空间名空间System.Net.Sockets说明说明列举
24、在解析地址时的寻址方案枚举名枚举名说明说明Unknown未知地址族Unspecified未指定地址族UnixUnix 本地到主机地址InterNetworkIPv4 地址InterNetworkV6IPv6 地址ImpLinkARPANET IMP 地址PupPUP 协议地址ChaosMIT CHAOS 协议的地址NSXerox NS 协议的地址IpxIPX 或 SPX 地址IsoISO 协议地址OsiOSI 协议地址Ecma欧洲计算机制造商协会(ECMA)地址DataKitDatakit协议地址CcittCCITT 协议(如X.25)地址SnaIBM SNA 地址DecNetDECnet 地
25、址DataLink直接数据链接接口地址LatLAT 地址HyperChannelNSC Hyperchannel 地址AppleTalkAppleTalk 地址NetBiosNetBios 地址VoiceViewVoiceView 地址FireFoxFireFox 地址BanyanBanyan 地址Atm本机ATM 服务地址ClusterMicrosoft 群集产品地址Ieee12844IEEE 1284.4 工作组地址IrdaIrDA 地址NetworkDesigners支持网络设计器OSI 网关的协议的地址MaxMAX 地址2、协议、协议Socket 支持的协议被封装在System.Net
26、.Sockets.ProtocolType 枚举类型中。枚举枚举ProtocolType名空间名空间System.Net.Sockets说明说明列举Socket 支持的协议枚举名枚举名说明说明Ggp网关到网关的协议IcmpInternet 控制报文协议IdpInternet 数据报协议IgmpInternet 组管理协议IPInternet 协议IPv4IPv4 的Internet 协议IpxInternet 数据包交换协议ND网络磁盘协议(非正式)PupPRAC 通用数据包协议Spx顺序包交换协议SpxII顺序包交换协议第 2版TcpTCP 协议UdpUDP 协议Raw原始 IP 数据包协议
27、IPv6IPv6 的Internet 协议IPv6DestinationOptionsIPv6 目标选项头IPv6FragmentHeaderIPv6 片段头IPv6HopByHopOptionsIPv6 逐跳选项头IPv6NoNextHeaderIPv6 No Next头IPv6RoutingHeaderIPv6 路由头IPSecAuthenticationHeaderIPv6 身份验证头IPSecEncapsulatingSecurityPayloadIPv6 封装式安全措施负载头IcmpV6用于 IPv6 的互联网控制报文协议Unknown未知协议Unspecified未指定的协议在使用
28、上述类型协议时,要求操作系统上必须安装支持该协议的驱动程序,才能成功创建Socket 实例。3、数据流类型、数据流类型使用 Socket 进行网络通信的数据流类型被封装在System.Net.Sockets.ScoketType 枚举类型中。枚举枚举SocketType名空间名空间System.Net.Sockets说明说明列举Socket 数据流类型枚举名枚举名说明说明Stream支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。此类型的Socket与单个对方主机进行通信,并且在通信开始之前需要远程主机连接。该类型用于TCP 协议和InterNetwork 地址族Dgram支持数
29、据报,即最大长度固定(通常很小)的无连接、不可靠消息。消息可能会丢失或重复并可能在到达时不按顺序排列。该类型的 Socket在发送和接收数据之前不需要任何连接,并且可以与多个对方主机进行通信,用于 UDP 协议和InterNetwork 地址族Raw支持对基础传输协议的访问。通过使用该类型,可以使用 ICMP 协议和IGMP协议来进行通信。在发送时,必须提供完整的 IP 报头,所接收的数据报在返回时会保持其IP 报头和选项不变Rdm支持无连接、面向消息、以可靠方式发送的消息,并保留数据中的消息边界。RDM(以可靠方式发送的消息)消息会依次到达,不会重复。此外,如果消息丢失,将会通知发送方。如果
30、使用该类型初始化 Socket,则在发送和接收数据之前无需建立远程主机连接,并且可以与多个对方主机进行通信Seqpacket提供排序字节流的面向连接且可靠的双向传输。该类型不重复数据,它在数据流中保留边界。该类型的 Socket与单个对方主机通信,并且在通信开始之前需要建立远程主机连接Unknown未知Socket类型在.NET Framework 2.0 中,还新增了重复使用某一进程的 Socket实例的构造方法,其方法签名为:Socket(SocketInformation socketInfo);SocketInformation 是使用Socket 类提供的DuplicateAndCl
31、ose 方法获取的返回值类型,它是定义在System.Net.Sockets 名空间下的结构。结构结构SocketInformation名空间名空间System.Net.Sockets说明说明封装复制Socket 实例信息属性名属性名属性类型属性类型说明说明读写读写属性属性OptionsSocketInformationOptionsSocket选项ProtocolInformationbyte Socket协议信息SocketInformationOptions 是用来描述Socket 实例状态的枚举类型,定义在System.Net.-Sockets 名空间。枚举枚举SocketInform
32、ationOptions名空间名空间System.Net.Sockets说明说明列举Socket 实例的状态,可按位组合枚举名枚举名说明说明NonBlocking非阻塞状态Connected连接状态Listening侦听新的连接UseOnlyOverlappedIO使用重叠I/ODuplicateAndClose 方法用来复制目标进程的 Socket实例,并关闭此进程的Socket,其签名为:SocketInformation DuplicateAndClose(int tagetProcessId);三、绑定或连接网络资源(服务)三、绑定或连接网络资源(服务)当创建了 Socket 实例后,
33、需要将其绑定或连接到网络资源或网络服务上。要绑定到本地资源或服务可使用Bind 方法,Bind 方法签名为:void Bind(EndPoint localPoint);要连接到网络资源或服务可使用 Connect方法,Connect方法是同步连接网络资源或服务的方法,具有以下重载形式:void Connect(EndPoint remotedPoint);void Connect(IPAddress address,int port);void Connect(IPAddress addresses,int port);void Connect(string hostName,int por
34、t);若希望使用异步方式连接网络资源或服务可以使用BeginConnect 方法开始尝试连接,它具有以下重载形式:IAsyncResult BeginConnect(EndPoint remotedPoint,AsyncCallback callback,object state);IAsyncResult BeginConnect(IPAddress address,int port,AsyncCallback callback,object state);IAsyncResult BeginConnect(IPAddress addresses,int port,AsyncCallback
35、 callback,object state);IAsyncResult BeginConnect(string hostName,int port,AsyncCallback callback,object state);要结束异步连接使用 EndConnect方法,它的方法签名为:void EndConnect(IAsyncResult result);在上述方法中,EndPoint 类表示一个网络资源或服务的连接点,它实际上用来表示访问一个网络资源时的主机地址和服务端口号。EndPoint 是抽象类,定义在System.Net 名空间,其类的静态结构如下图所示:在上图中,DnsEndPo
36、int 类是在.NET Framework 4.0 中新增的连接点类型类,它使用域名和端口号来描述一个网络资源的连接位置。SocketAddress 是用来存储EndPoint 实例序列化信息的类。1、主机、主机 IP地址地址System.Net.IPAddress 类封装了在描述主机 IP 地址时使用点分十进制表示的 IPv4 地址和使用冒号十六进制表示的IPv6 地址。类类IPAddress名空间名空间System.Net说明说明描述IP 网络上的地址构造方法构造方法IPAddress(byte address)IPAddress(long address)IPAddress(byte a
37、ddress,long scopeId)静态静态只读只读字段字段字段名字段名字段类型字段类型说明说明NoneIPAddress等效于255.255.255.255Loopback等效于127.0.0.1,本机地址、环回地址Broadcast等效于255.255.255.255,广播地址Any等效于0.0.0.0,侦听所有网络接口上的客户端活动IPv6Any等效于0:0:0:0:0:0IPv6Loopback等效于0:0:0:0:0:1IPv6None等效于0:0:0:0:0:0只读只读成员成员属性属性属性名属性名属性类型属性类型说明说明AddressFamilyAddressFamilyIP
38、地址族ScopeIdlongIPv6 地址范围标识符IsIPv6SiteLocalboolIPv6 本机地址标识IsIPv6LinkLocalboolIPv6 链接本机地址标识IsIPv6MulticastboolIPv6 多路广播全局地址标识IsIPv6Teredobool具有 2001:/32前缀的IPv6 地址标识方法方法方法签名方法签名说明说明静态静态方法方法short HostToNetworkOrder(short host)int HostToNetworkOrder(int host)long HostToNetworkOrder(long host)主机字节顺序转换成网络字节
39、顺序short NetworkToHostOrder(short address)int NetworkToHostOrder(int address)long NetworkToHostOrder(long address)网络字节顺序转换成主机字节顺序bool IsLoopback(IPAddress address)判断是否为环回地址IPAddress Parse(string ipString)IP 地址字符串转换成IPAddress实例bool TryParse(string ipString,out IPAddress address)成员成员方法方法byte GetAddress
40、Bytes()转换成字节数组string ToString()转换成字符串表示法2、域名解析、域名解析System.Net.Dns 类是进行域名解析时使用的静态类,它提供了两种域名解析处理方式。类类Dns名空间名空间System.Net说明说明提供简单的域名解析功能的静态类静静态态方方法法方法签名方法签名说明说明同同步步方方法法IPAddress GetHostAddress(string nameOrAddress)获取 IP 地址列表IPHostEntry GetHostEntry(IPAddress address)IPHostEntry GetHostEntry(string name
41、OrAddress)string GetHostName()获取本地主机名异异步步方方法法IAsyncResult BeginGetHostAddresses(string nameOrAddress,AsyncCallback callback,object state)IPAddress EndGetHostAddresses(IAsyncResult result)IAsyncResult BeginGetHostEntry(IPAddress address,AsyncCallback callback,object state)IPHostEntry EndGetHostEntry(
42、IAsyncResult result)由于在网络中一台主机可能拥有不只一个的名称或IP 地址,因此.NET Framework 在System.Net 名空间定义了 IPHostEntry 类来描述主机拥有的名称和IP 地址列表。类类IPHostEntry名空间名空间System.Net说明说明用于存储主机的域名、别名和 IP 地址的容器类构造方法构造方法IPHostEntry()成员成员属性属性属性名属性名属性类型属性类型说明说明AddressListIPAddress 与主机关联的 IP 地址列表Aliasesstring 与主机关联的别名列表HostNamestring主机 DNS 域
43、名3、面向连接的处理、面向连接的处理在使用面向连接的通信方式时,当将Socket 实例绑定到特定的主机地址和端口后可调用Listen 方法侦听客户的连接。Listen 方法的签名为:void Listen(int blocklog);在调用该方法时需提供允许挂起等待队列的最大长度参数。四、面向连接的通信处理四、面向连接的通信处理1、发送数据、发送数据Send 方法用来同步发送数据,具有以下重载形式:int Send(byte buffer);int Send(byte buffer,SocketFlags flags);int Send(byte buffer,int size,SocketF
44、lags flags);int Send(byte buffer,int offset,int size,SocketFlags flags);int Send(byte buffer,int offset,int size,SocketFlags flags,out SocketError errorCode);int Send(IListArraySegment buffer);int Send(IListArraySegment buffer,SocketFlags flags);int Send(IListArraySegment buffer,SocketFlags flags,ou
45、t SocketError errorCode);在这些重载方法中,SocketFlags 是枚举类型,用于描述发送或接受数据时的行为特征。枚举枚举SocketFlags名空间名空间System.Net.Sockets说明说明列举在发送或接受数据时的行为特征,可按位组合枚举名枚举名说明说明None不使用标志OutOfBand处理带外数据Peek查看传入的消息DontRoute不使用路由表发送MaxIOVectorLength为发送和接收数据的 WSABUF 结构数量提供标准值Truncated消息太大,无法放入指定的缓冲区而被截断ControlDataTruncated数据不适合内部 64KB
46、 缓冲区,并且已被截断Broadcast广播数据包Multicast多路广播数据包Partial部分消息被发送或接收SocketError 是用来描述发送或接受 过程中产生错误的错误码枚举类型。要异步发送数据,可使用 BeginSend 和EndSend 方法实现。BeginSend 方法具有以下重载形式:IAsyncResult BeginSend(byte buffer,int offset,int size,SocketFlags flags,AsyncCallback callback,object state);IAsyncResult BeginSend(byte buffer,i
47、nt offset,int size,SocketFlags flags,out SocketError errorCode,AsyncCallback callback,object state);IAsyncResult BeginSend(IListArraySegment buffer,SocketFlags flags,AsyncCallback callback,object state);IAsyncResult BeginSend(IListArraySegment buffer,SocketFlags flags,out SocketError errorCode,Async
48、Callback callback,object state);EndSend 方法具有以下重载形式:int EndSend(IAsyncResult result);int EndSend(IAsyncResult result,out SocketError errorCode);若发送的为文件数据时,可使用 SendFile 方法,该方法具有以下重载形式:void SendFile(string fileName);void SendFile(string fileName,byte preBuffer,byte posBuffer,TransmitFileOptions flags);
49、同样发送文件数据也可以使用 BeginSendFile 和EndSendFile 来实现异步发送处理。BeginSendFile 方法具有以下重载形式:IAsyncResult BeginendSendFile(string fileName,AsyncCallback callback,object state);IAsyncResult BeginSendFile(string fileName,byte preBuffer,byte posBuffer,TransmitFileOptions flags,AsyncCallback callback,object state);结束异步发
50、送处理使用 EndSendFile 方法,其方法签名为:void EndSendFile(IAsyncResult result);2、接受方法、接受方法Receive 方法用来同步接受数据,具有以下重载形式:要异步接受数据,可使用 BeginReceive 和 EndReceive 方法实现。BeginRecive 方法具有以下重载形式:EndReceive 方法的签名为:五、无连接的通信处理五、无连接的通信处理六、六、TCP协议的封装协议的封装为了简化 TCP 协议的Socket 编程,.NET Framework 提供了TcpListener 和 TcpClient两个使用TCP 协议的