检查通过以太网C连接#
问题描述:
我已阅读了几个来源。我跟着this接受的答案,并使用Managed WiFi API获得SSID,如果我通过WiFi连接。这里是我的代码:检查通过以太网C连接#
private void setSSID() {
WlanClient wlan = new WlanClient();
Collection<String> connectedSsids = new Collection<string>();
foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) {
Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID, 0, (int)ssid.SSIDLength)));
}
}
如果我通过WiFi连接但是如果只通过以太网连接则会引发异常,这将完美地获得SSID。理想的解决方案:
- 输入
setSSID()
(或东西类似效果) - 检查是否通过以太网
- 如果这样连接,返回
null
/0
/undefined
- 否则,将SSID
(如果连网络,我已经接受检查)
我已经看遍了所有的WMI和NetworkInformation命名空间,但都没有提供我在找什么。
展望WlanApi.cs,异常被抛出在这里:
public Wlan.WlanConnectionAttributes CurrentConnection {
get {
int valueSize;
IntPtr valuePtr;
Wlan.WlanOpcodeValueType opcodeValueType;
Wlan.ThrowIfError(
Wlan.WlanQueryInterface(client.clientHandle, info.interfaceGuid, Wlan.WlanIntfOpcode.CurrentConnection, IntPtr.Zero, out valueSize, out valuePtr, out opcodeValueType));
try {
return (Wlan.WlanConnectionAttributes)Marshal.PtrToStructure(valuePtr, typeof(Wlan.WlanConnectionAttributes));
}
finally {
Wlan.WlanFreeMemory(valuePtr);
}
}
}
又看了看:
答
您可以捕获该异常(你是Win32Exception
报告),并将其视为“无WiFi可用”条件。
如果你愿意,你可以检查ErrorCode
或HResult
属性的异常情况,以确保它是你在缺乏WiFi的情况下所期望的错误,而不是其他一些更有问题的例外。在后一种情况下,您可能需要重新抛出异常(至少在您确定处理的错误类型的好策略之前)。
还有native wireless LAN API,您可以直接使用,处理错误代码/结果,而不是处理异常。但我认为在你的情况下,处理抛出的异常是最简单的,因为否则它就像你想的那样工作。
+0
真棒,欢呼的人:) – wmash
抛出什么异常?你能不能简单地抓住这个例外,把它当作“没有wifi可用”的条件?看起来原生API是[这里](https://msdn.microsoft.com/en-us/library/windows/desktop/ms706274(v = vs.85).aspx)。如果你不喜欢处理库中的异常,我想你可以编写自己的包装器,并直接处理。这个API可以让你找到接口,枚举每个接口上可用的网络等等。由于你似乎能够告诉你现有的代码是否通过WiFi连接,所以你不清楚你在问什么。 –
@PeterDuniho我没有想到赶上例外。我的错。它抛出了一个'Win32Exception',所以我抓住它并返回了必要的。邮政编码作为答案,我会接受:) – wmash
好的,做到了。 :) –