当前位置:首页 > Windows程序 > 正文

C#实现远程开机(局域网测试通过)

2021-03-26 Windows程序

首先介绍相关知识。 
UDP协议 
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 
下面是UDP与TCP的一些区别: 
**A)**UDP是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。 
**B)**UDP是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。 
**C)**UDP是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。 
**D)**UDP没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。 
**E)**UDP支持一对一、一对多、多对一和多对多的交互通信。 
**F)**UDP的头部占用较小,只占用8个字节。

阻塞与非阻塞 
简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,,那就阻塞了,否则就可以理解为非阻塞。 
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态. 
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。 
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 
举个栗子: 
你问书店老板有没有《深入浅出MFC》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果;如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

IPAddress类 
提供网际协议地址 
IPAddress.Broadcast 字段 
提供IP广播地址,此字段为只读。 
语法:public static readonly IPAddress Broadcast 
Broadcast字段等效于以点分隔的四部分表示法格式的255.255.255.255

UdpClient类 
提供用户数据报(UDP)网络服务 
语法:public class UdpClient : IDisposable 
UdpClient类提供了一些简单的方法,用于在阻止模式下发送和接受无连接UDP数据报。 
您可以选择使用下面两种方法之一来建立默认远程主机: 
1.使用远程主机名和端口号作为参数创建 UdpClient 类的实例。 
2.创建 UdpClient 类的实例,然后调用 Connect 方法。

UdpClient.Connect 方法 (IPAddress, Int32) 
使用指定的 IP 地址和端口号建立默认远程主机。 
命名空间: System.Net.Sockets 
程序集: System(在 System.dll 中) 
语法:public void Connect(IPAddress addr, int port) 
参数: 
addr 要将数据发送到的远程主机的IPAddress 
port 要将数据发送到的端口号。

如果在调用 Send 方法时指定了 IPAddress.Broadcast ,则可以将数据广播到默认的广播地址:255.255.255.255。 
UdpClient.Send方法(Byte[], Int32) 
将UDP数据报发送到远程主机。 
语法:public int Send(byte[] dgram, int bytes) 
参数: 
dgram Byte类型的数组,它指定您打算以字节数据形式发送的UDP数据报 
bytes 数据报中的字节数 
返回值:已发送的字节数。 
调用此方法将数据报发送在Connect方法中建立的远程主机,并返回发送的字节数。如果在调用此重载之前未调用Connect,则Send方法引发异常(SockeException)。

MAC地址 
MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。 MAC地址是网卡决定的,是固定的。 
谈起MAC地址,不得不说一下IP地址。IP地址工作在OSI参考模型的第三层网络层。两者之间分工明确,默契合作,完成通信过程。IP地址专注于网络层,将数据包从一个网络转发到另外一个网络;而MAC地址专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点。

获取本机MAC地址 
运行cmd,键入命令 ipconfig/all

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67602.html