《2022年C#网络编程 .pdf》由会员分享,可在线阅读,更多相关《2022年C#网络编程 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、IPAddress ip = IPAdress.Parse( “ 192.168.1.1” ); IPAddress类提供了7 个只读字段,分别代表程序中使用的特殊的IP地址:Any 表示本地系统可用的任何IPV4地址Broadcast 表示本地IPV4网络广播地址IPV6Any Socket.Bind 方法用此字段指出本地系统可用的IPV6 地址IPV6Loopback 表示系统的IPV6 回送地址IPV6None 表示系统上没有可用的IPV6网络接口Loopback 表示系统的IPV4 回送地址None 表示系统上没有可用的IPV4网络接口GetHostAddresses 方法获取指定主机
2、的IP地址,返回一个IPAddress类型的数组,函数原型为:Public static IPAddress GetHostAddresses(string hostNameOrAddress); 例如:IPAddress ip = Dns.GetHostAddresses(“ ” ); listBox1.Items.AddRange(ip); GetHostName 方法 : 获取本机主机名。例如:String hostname = Dns.GetHostName(); IPHostEntry 类 包含两个常用的属性:1.AddressList 属性的作用是获取或设置与主机相关联的IP 地址
3、列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址。2.HostName 属性包含了服务器的主机名。例子:listBox1.Items.Add( “ 搜狐新闻所用的服务器IP地址有: ” ); IPAddress ip = Dns.GetHostEntry(“ ” ).AddressList; listBox1.Items.AddRange(ip); listBox1.Items.Add( “ 本机 IP地址为: ” ); ip = Dns.GetHostEntry(Dns.GetHostName().AddressList; listBox1.Items.AddRange
4、(ip); IpEndPoint 类的构造函数:Public IPEndPoint(IPAddress,int); IPAddress参数指定IP地址, ,int 指定相应的端口号。网络地址和服务端口的组合称为端点。在C#中使用 IPEndPoint 类表示这个端点,该类包含了应用程序连接到主机的服务所需的IP地址和端口信息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 结合 IPAddress类、 Dns 类、 IPHost
5、Entry 类和 IPEndPoint类的使用方法运行下面的例子:Private void buttonLocal_Click(object sender , EventArgs e) listBox1.Items.Clear(); string name = Dns.GetHostName(); listBox1.Items.Add( “ 本机主机名: ” + name); IPHostEntry me = Dns.GetHostEntry(name); listBox1.Items.Add( “ 本机所有 IP地址: ” ); foreach(IPAddress ip in me.Addr
6、essList) listBox1.Items.Add(ip); IPAddress localip = IPAddress.Parse( “ 127.0.0.1” ); IPEndPoint iep = new IPEndPoint(localip,80); listBox1.Items.Add( “ The IPEndPoint is:” + iep.ToString(); listBox1.Items.Add( “ The max port number is: ” +IPEndPoint.MaxPort); listBox1.Items.Add( “ The min port numb
7、er is: ” +IPEndPoint.MinPort); Private void buttonRemote_Click(object sender , EventArgs e) listBox1.Items.Clear(); IPHostEntry remoteHost = Dns.GetHostEntry( “ ” ); IPAddress remoteIP = remoteHost.AddressList; listBox1.Items.Add( 百度: ); foreach(IPAddress ip in remoteIP) IPEndPoint iep = new IPEndPo
8、int(ip,80); listBox1.Items.Add(iep); Socket 类包含在 System.Net.Sockets命名空间中。 Socket 类的构造函数为:Public Socket(AddressFamily addressFamily,SocketType SocketType,ProtocolType protocolType); AddressFamily为 网 络 类 型 , 指 定Socket使 用 的 寻 址 方 案 , 例 如AddressFamily.InterNetWork 表明为 IP 版本 4 的地址; SocketType 指定 Socket 的
9、类型,例如 SocketType.Stream 表明连接是基于流套接字的,二SocketType.Dgram 表示连接是基于数据报套接字的;ProtocolType 指定 Socket 使用的协议,例如ProtocolType.Tcp 表明连接协议是TCP协议,而 ProtocolType.Udp 则表明连接协议是UDP协议。SocketType ProtocolType 说明Dgram Udp 无连接通信Stream Tcp 面向连接通信Raw Icmp Internet 控制报文协议Raw Raw 简单 IP 包通信名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
10、- - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 创建套接字实例:Socket socket = new Socket(AddressFamily.InterNetWork,SocketType.Stream,ProtocolType.Tcp) 套接字常用属性属性说明AddressFamily 获取套接字的Address family Avilable 从网络中获取准备读取的数据数量Blocking 获取或设置表示套接字是否处于阻塞模式Connected 获取一个值,该值表明套接字是否与最后完成发送或接
11、收操作的远程设备得到连接LocalEndPoint 获取套接字的本地EndPoint 对象ProtocolType 获取套接字的协议类型RemoteEndPoint 获取套接字的远程EndPoint 对象SocketType 获取套接字的类型Socket 对象的 SetSocketOption 方法设置套接字的四种重载方法:Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,Boolean value) Public void SetSocketOption(SocketOptionLevel ol,Sock
12、etOptionName on,byte value) Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,int value) Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,object value) Ol 定义套接字选项的类型,可选择类型有:IP、IPV6、 Socket、Tcp 、Udp。SocketOptionLevel SocketOptionName 说明IP AddMembership 增加一个 IP组成
13、员IP HeaderIncluded 指出发送到套接字的数据将包括IP头IP IPOptions 指定 IP 选项插入到输出的数据包中IP MulticastInterface 设置组播包使用的接口IP MultiLoopBack IP组播回送IP PacketInformation 返回关于接收包的信息IP UnBlockSource 设置套接字为无阻塞模式Socket AcceptConnection 如果为真,套接字正在侦听Socket Broadcast 如果为真, 允许在套接字上发送广播信息Socket MaxConnections 设置使用的最大队列长度Socket PacketI
14、nformation 返回接收到的套接字信息Socket ReceiveBugffer 接收套接字的缓存大小Socket ReceiveTimeout 接收套接字的超时时间Socket SendBuffer 发送套接字的缓存大小Socket SendTimeout 发送套接字的超时时间Socket Type 获取套接字的类型Socket UseLookback 使用回传Tcp NoDelay 为发送合并禁用Nagle 算法Udp ChecksumConverage 设置或获取UDP 校验和覆盖Udp Nochecksum 发送校验和设置为零的UDP数据报Value 参数指定 SocketOpt
15、ionName 的值。例如:Socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeOut,1000); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 服务端客户端面向连接的套接字编程Bind(IPEndPoint address)Address 为 IPEndPoint的实例,该实例包括一个本地IP地址和一个端口号。绑定之后开始监听:
16、Listen(int backlog) backlog 参数指出系统等待用户程序服务排队的连接数,超过连接数的任何客户端都不能与服务器进行通信。当有客户连接进来之后应创建新的Socket 套接字进行接收Socket clientSocket = Localsocket.Accept(); 接受客户机连接之后,客户机和服务器可以传递数据。Receive方法和 Send方法方法说明Receive(byte data) 接收数据放到接收缓冲器中Receive(Generic LList data) 接收数据放到接收缓冲器列表中Receive(byte data,SocketFlags sf) 接收数
17、据放到接收缓冲器中,并设置套接字标志Receive(Generic LList data,SocketFlags sf) 接收数据放到接收缓冲器列表中,并设置套接字标志Receive(byte data,int size ,SocketFlags sf) 接收指定容量的数据放到接收缓冲器中,并设置套接字标志Receive(byte data,int offset,int size,SocketFlags sf) 接收一定容量的数据放到接收缓冲器中指定偏移量位置,并设置套接字标志Send(byte data) 向一个已连接的套接字发送数据Socket.Send(Generic LList dat
18、a) 向一个已连接的套接字发送在列表中的磁盘缓存块数Send(byte data,SocketFlags sf) 向一个已连接的套接字发送数据,并设置标志Socket.Send(Generic LList data ,SocketFlags sf) 向一个已连接的套接字发送在列表中的磁盘缓存块数,并设置套接字标志Send(byte data,int size,SocketFlags sf) 发送一定容量的指定类型数据,并设置套接字标志Send(byte data,int offset, int size,SocketFlags sf) 发送从某处开始的一定容量的指定类型的数据,并设置套接字标志
19、Socket() Bind() Listen() Accept() Receive() Send() Close() Socket() Connect() Send() Receive() Close() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - SocketFlag的值值说明DontRoute 不用内部路由表发送数据MaxIoVectorLength 给用于发送和接收数据的WSABUF结构提供一个标准值None 对这次调
20、用不使用标志OutOfBind 处理带外的数据Partial 部分的发送或接收信息Peek 只对进入的消息取数Socket.ShutDown 值值说明SocketShutdown.Receive 防止在套接字上接收数据,如果收到额外的数据,将发出一个RST信号SocketShutdown.Send 防止套接字上发送数据,在所有存留在缓冲器中的数据发送出去之后,发出一个FIN 信号SocketShutdown.Both 在套接字上既停止发送也停止接收Sock.Shutdown(SocketShutdown.Both); Sock.Close(); 设备 1 设备 2 无连接套接字编程Socket
21、 socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); NetWorkStream networkStream = new NetWorkStream(socket); 一旦构造了一个NetWorkStream 对象,就不需要使用Socket 对象了。NetWorkStream 类的常用属性属性说明CanRead 指示 NetWorkStream 是否支持读操作,默认是True CanWrite 指示 NetWorkStream 是否支持写操作,默认是True CanSeek 指示
22、 NetWorkStream 是否支持查找操作,该属性总是False DataAvailable 指示 NetWorkStream 是否有可用的数据,有则为真Position 获取或设置流中的当前位置,总是引发NotSupporteException Readable 指示 NetWorkStream 是否可读,为真时可读,假时不可读Writeable 指示 NetWorkStream 是否可写,为真时可写,假时不可写Socket() Bind() ReceiveFrom() SendTo() Close() Socket() Bind() SendTo() ReceiveFrom() Clo
23、se() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - NetWorkStream 类的常用方法方法说明BeginRead 开始向 NetWorkStream 流开始异步读取BeginWrite 开始向 NetWorkStream 流异步写入EndRead 结束对一个NetWorkStream 流的异步读取EndWrite 结束对一个NetWorkStream 流的异步写入Read 从 NetWorkStream 流中读取数据
24、Write 从 NetWorkStream 流中写入数据ReadByte 从 NetWorkStream 流中读取一个字节的数据WriteByte 向 NetWorkStream 流中写入一个字节的数据Flush 从 NetWorkStream 流中取走所有的数据Close 关闭 NetWorkStream 对象Dispose 释放 NetWorkStream 占用的资源Seek 查找 NetWorkStream 流的当前位置TcpClient()类的四种重载方法:1.TcpClient(): TcpClient tcpClient = new TcpClient(); tcpClient.C
25、onnect(“ ” ,51888); 2.TcpClient(AddressFamily family): TcpClient tcpClient = new TcpClient(AddressFamily.InterNetwork);tcpClient.Connect( “ ” ,51888) 3.TcpClient(IPEndPoint iep):IPAddress address = Dns.GetHostAddresses(Dns.GetHostName(); IPEndPoint iep = new IPEndPoint(address0, 51888); TcpClient tc
26、pClient = new TcpClient(iep); tcpClient.Connect(, 51888); 4.TcpClient(string hostname,int port): TcpClient tcpClient=new TcpClient(, 51888);TcpClient类的常用属性属性含义Client 获取或设置基础套接字LingerState 获取或设置套接字保持连接的时间NoDelay 获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟ReceiveBufferSize 获取或设置Tcp接收缓冲区的大小ReceiveTimeOut 获取或设置套接字接收数据超
27、时时间SendBufferSize 获取或设置Tcp发送缓冲区的大小SendTimeout 获取或设置套接字发送数据超时时间TcpClient类的常用方法方法含义Close 释放 TcpClient 实例,而不关闭基础连接Connect 用指定的主机名和端口号将客户端连接到Tcp主机BeginConnect 开始一个对远程主机连接的异步请求EndConnect 异步接受传入的连接尝试GetStream 获取能够发送和接收数据的NetworkStream 对象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
28、 - - - - 第 6 页,共 7 页 - - - - - - - - - TcpListenner 类两种重载方法:1.TcpListener(IPEndPoint iep) 2.TcpListener(IPAddress localAddr,int port) 四种方法:1.AcceptSocket() 2.AcceptTcpClient() 3.Start() 4.Stop() 解决 TCP协议消息边界问题的方法有三种:1.发送固定长度的消息2.将消息长度和消息一起发送3.使用特殊标记分隔符TcpListener和 TcpClient及 Socket提供的部门异步操作方法类提供的方法说
29、明TcpListener BeginAcceptTcpClient 开始一个异步操作接受一个传入的连接尝试EndAcceptTcpClient 异步接受传入的连接尝试,并创建新的 TcpClient处理远程主机通信TcpClient BeginConnect 开始一个队远程主机连接的异步请求EndConnect 异步接受传入的连接尝试Socket BeginReceive 开始从连接的Socket 中异步接收的数据EndReceive 结束挂起的异步读取BeginSend 将数据异步发送到连接的Socket EndSend 结束挂起的异步发送名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -