|
Программирование >> Автоматически обновляемые приложения
Пистйнг 16.19. Проверка подключения локальной системы к сети [Dlllmport( sensapi.dll )] private extern static bool IsNetworkAlive(ref int flags); private static int NETWORK ALIVE LAN = 0x00000001; private static int NETWORK ALIVE WAN = 0x00000002; public static bool IsLanAlive() { return IsNetworkAlive(ref NETWORK ALIVE LAN); public static bool IsWanAliveO { return IsNetworkAlive(ref NETWORK ALIVE WAN); private void buttonl Click(object sender, EventArgs e) { this.Text = IsLanAlive0 .ToString0; private void button2 Click(object sender, EventArgs e) { this.Text = IsWanAliveO .ToStringO ; Примечание Пример проверки связи находится в папке NetworkDemo на прилагаемом диске. Как выяснить, подключена ли локальная система к сети, и узнать используемый тип соединения? Сетевая функция Windows API isNetworkAlive определяет, подключена ли локальная система к сети, а также возвращает информацию о типе соединения (LAN, WAN). Пример ее использования показан в листинге 16.19. Листинг 16.20. Получение списка всех компьютеров локальной сети using System.Runtime.InteropServices; using System.Collections; [Dlllmport( netapi32.dll , EntryPoint = NetServerEnum )] public static extern NERR NetServerEnum ( [MarshalAs(UnmanagedType.LPWStr)]string ServerName, int Level, out IntPtr BufPtr, int PrefMaxLen, ref int EntriesRead, ref int TotalEntries, SV 101 TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)] string Domain, int ResumeHandle); [Dlllmport( netapi32.dll , EntryPoint = NetApiBufferFree )] public static extern NERR NetApiBufferFree(IntPtr Buffer); [StructLayout(LayoutKind.Sequential)] public struct SERVER INFO 101 { [MarshalAs(UnmanagedType.U4)] public uint svl01 platform id; [MarshalAs(UnmanagedType.LPWStr)] public string svl01 name; [MarshalAs(UnmanagedType.U4)] public uint svl01 version major; [MarshalAs(UnmanagedType.U4)] public uint svl01 version minor; [MarshalAs(UnmanagedType.U4)] public uint svl01 type; Получение списка всех компьютеров локальной сети Если вы работаете в локальной сети, то, несомненно, для вас интересен вопрос, как получить список всех работающих компьютеров в локальной сети или, например, список серверов SQL. Таюке хочется знать, как получить имя домена, контроллера домена и другую информацию. Встроенными средствами .NET Framework реализовать эту задачу пока не удастся. В листинге 16.20 показано, как достичь результата, воспользовавшись функциями Windows API. / <summary> / Список ошибок, возвращаемых NetServerEnum / </summary> public enum NERR { NERR Success =0, успех ERROR ACCESS DENIED = 5, ERROR NOT ENOUGH MEMORY = 8, ERROR BAD NETPATH = 53, ERROR NETWORK BUSY =54, ERROR INVALID PARAMETER =87, ERROR INVALID LEVEL =124, ERROR MORE DATA =234, ERROR EXTENDED ERROR = 1208, ERROR NO NETWORK = 1222, ERROR INVALID HANDLE STATE = 1609, ERROR NO BROWSER SERVERS FOUND = 6118, / <suramary> / Типы серверов / </summary> [Flags] public enum SV 101 TYPES : uint { SV TYPE WORKSTATION = 0x00000001, SV TYPE SERVER = 0x00000002, SV TYPE SQLSERVER = 0x00000004, SV TYPE DOMAIN CTRL = 0x00000008, SV TYPE DOMAIN BAKCTRL = 0x00000010, SV TYPE TIME SOURCE = 0x00000020, SV TYPE AFP = 0x00000040, SV TYPE NOVELL = 0x00000080, SV TYPE DOMAIN MEMBER = 0x00000100, SV TYPE PRINTQ SERVER = 0x00000200, SV TYPE DIALIN SERVER = 0x00000400, SV TYPE XENIX SERVER = 0x00000800, SV TYPE SERVER UNIX = SV TYPE XENIX SERVER, [MarshalAs(UnmanagedType.LPWStг)] public string svl01 corament;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |