C#中怎么用代码来实现查看局域网的电脑和IP

1、微软社区上介绍了使用Active Directory 来遍历局域网
利用DirectoryEntry组件来查看网络
网址:http://www.microsoft.com/china/communITy/program/originalarticles/techdoc/DirectoryEntry.mspx


private void EnumComputers()
{
    using(DirectoryEntry root = new DirectoryEntry("WinNT:"))
    {
      foreach(DirectoryEntry domain in root.Children)
      {
        Console.WriteLine("Domain | WorkGroup: "+domain.Name);
        foreach(DirectoryEntry computer in domain.Children)
    {
     Console.WriteLine("Computer: "+computer.Name);
    }
   }
}
}


效果评价:速度慢,效率低,还有一个无效结果 Computer: Schema 使用的过程中注意虑掉。

2、利用Dns.GetHostByAddress和IPHostEntry遍历局域网


private void EnumComputers()
{
for (int i = 1; i <= 255; i++)
{
string scanIP = "192.168.0." + i.ToString();

IPAddress myScanIP = IPAddress.Parse(scanIP);

IPHostEntry myScanHost = null;

try
{
    myScanHost = Dns.GetHostByAddress(myScanIP);
}

catch
{
    continue;
}

if (myScanHost != null)
{
    Console.WriteLine(scanIP+"|"+myScanHost.HostName);
}
}
}


效果评价:效率低,速度慢,不是一般的慢。

3、使用System.Net.NetworkInformation.Ping来遍历局域网


private void EnumComputers()
{
try
{
   for (int i = 1; i <= 255; i++)
   {
     Ping myPing;
     myPing = new Ping();
     myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);

     string pingIP = "192.168.0." + i.ToString();
     myPing.SendAsync(pingIP, 1000, null);
   }
}
catch
{
}
}

PRIVATE void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
{
if (e.Reply.Status == IPStatus.Success)
{
    Console.WriteLine(e.Reply.Address.ToString() + "|" + Dns.GetHostByAddress(IPAddress.Parse(e.Reply.Address.ToString())).HostName);
}

}


效果评价:速度快,效率高,如果只取在线的IP,不取计算机名,速度会更快。
需要注意的是取计算机名称如果用Dns.GetHostByAddress取计算机名称,结果虽然正确,但VS2005会提示该方法已过时,但仍能使用。
如果用它推荐的替代方法Dns.GetHostEntry,则有个别计算机的名称会因超时而获得不到。

C#创建一个窗体应用程序,通过UDP广播来唤醒另一台电脑,你需要使用`System.Net.Sockets`命名空间下的`UdpClient`类来进行广播操作。这里是一个基础示例,假设你已经有了两个按钮(一个用于发送广播,另一个用于接收并处理响应),以及必要的MAC地址和IP地址信息: ```csharp using System; using System.Net; using System.Net.Sockets; public partial class Form1 : Form { private UdpClient udpSender; private UdpClient udpReceiver; public Form1() { InitializeComponent(); // 初始化发送者和接收者UdpClient实例 udpSender = new UdpClient(); udpReceiver = new UdpClient(5000); // 接收端口,默认为5000 // 设置发送者的广播地址 IPEndPoint broadcastAddress = new IPEndPoint(IPAddress.Broadcast, 5000); udpSender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); } private void btnSend_Click(object sender, EventArgs e) { // 获取用户输入的IP和MAC地址 string ipAddress = "192.168.1.2"; // 改为你需要唤醒的电脑IP string macAddress = "01:23:45:67:89:ab"; // 改为你需要唤醒的电脑的MAC地址 // 构建广播数据包 byte[] data = Encoding.ASCII.GetBytes($"Wakeup from MAC {macAddress} to IP {ipAddress}"); udpSender.Send(data, data.Length, broadcastAddress); // 显示一条消息表示广播已经发送 MessageBox.Show("广播已发送"); } private void btnReceive_Click(object sender, EventArgs e) { try { // 接受回应的数据 IPEndPoint remoteEP = udpReceiver.EndPoint; byte[] buffer = udpReceiver.Receive(ref remoteEP); // 解析接收到的数据 string message = Encoding.ASCII.GetString(buffer).TrimStart(new char[] { 'Wakeup', 'from', 'MAC', 'to', 'IP' }); Console.WriteLine($"Received response: {message}"); // 根据实际需求处理响应 // 这里只是简单地显示在控制台,你可以做更复杂的处理,如弹窗提示等 } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } ~Form1() // 析构函数释放资源 { udpSender.Close(); udpReceiver.Close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值