C#网络发现不起作用(Windows)

时间:2018-03-23 02:14:53

标签: c# .net windows

我正在尝试用C#读取网络上的设备,基本上它们出现在文件浏览器的“网络”标签中。

我能找到的唯一方法是:https://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using使用NetServerEnum()

无论我在谷歌搜索多么努力,一切都最终会回到那个链接。但它根本不起作用!我正在使用此代码:

static class Network {
    [DllImport("Netapi32")]
    static extern int NetServerEnum(string ServerNane, int dwLevel, ref IntPtr pBuf, int dwPrefMaxLen,
    out int dwEntriesRead, out int dwTotalEntries, int dwServerType, string domain, out int dwResumeHandle);

    [DllImport("Netapi32")]
    static extern int NetApiBufferFree(IntPtr pBuf);

    [StructLayout(LayoutKind.Sequential)]
    struct SERVER_INFO_100 {
        internal int id;
        [MarshalAs(UnmanagedType.LPWStr)]
        internal string name;
    }

    static int SV_TYPE_WORKSTATION = 1, SV_TYPE_SERVER = 2;
    static int SSIZE = Marshal.SizeOf(typeof(SERVER_INFO_100));

    public static ArrayList GetNetwork() {
        ArrayList net = new ArrayList();

        IntPtr buffer = IntPtr.Zero, tmpBuffer = IntPtr.Zero;
        int read = 0, total = 0, handle = 0;

        try {
            int ret = NetServerEnum(null, 100, ref buffer, -1, out read, out total, SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out handle);
            if(ret != 0) Console.WriteLine("Error Code "+ret+": "+new Win32Exception(ret).Message);
            Console.WriteLine(read+" of "+total);
            if(ret == 0) {
                for(int i=0; i<total; i++) {
                    tmpBuffer = new IntPtr((long)buffer + (i*SSIZE));
                    SERVER_INFO_100 inf = (SERVER_INFO_100)Marshal.PtrToStructure(tmpBuffer, typeof(SERVER_INFO_100));
                    net.Add(inf.name);
                }
            }
            NetApiBufferFree(buffer);
        } catch(Exception ex) {
            MessageBox.Show("Problem with acessing network computers in NetworkBrowser"
            +"\r\n\r\n\r\n"+ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            return null;
        }
        return net;
    }
}

我得到的错误代码是:

Error Code 1231: The network location cannot be reached. For information about network troubleshooting, see Windows Help

什么?我甚至没有尝试到达网络位置!此错误代码未在MSDN上的可能错误代码中列出。我做错了什么?

为什么使用已经内置于操作系统的Windows网络发现的基本功能如此困难,在一个名为.NET的API中?

0 个答案:

没有答案