获取局域网中所有开放了  11000端口的  电脑的IP 地址,

解决方案 »

  1.   

    找到的资料,根据你实际的情况参考一下把:
    //写这个程序,为了是显示局域网内的主机,然后通过用户点击选中的机器,检查是否该主机上安装有SQLSERVER,是为一个配置程序所写的   
      //这里提供CODE,给有需要的朋友   
        
      //设置DLL必须使用该命名空间   
      using   System.Runtime.InteropServices;   
        
          #region   动态链接库定义   
          [DllImport("mpr.dll",CharSet=CharSet.Auto)]   private   static   extern   int   WNetEnumResource(IntPtr   hEnum,   ref   int   lpcCount,IntPtr   lpBuffer,   ref   int   lpBufferSize   );   
          [DllImport("mpr.dll",CharSet=CharSet.Auto)]   private   static   extern   int   WNetOpenEnum(RESOURCE_SCOPE   dwScope,RESOURCE_TYPE   dwType,RESOURCE_USAGE   dwUsage,[MarshalAs(UnmanagedType.AsAny)][In]   Object   lpNetResource,out   IntPtr   lphEnum);   
          [DllImport("mpr.dll",CharSet=CharSet.Auto)]   private   static   extern   int   WNetCloseEnum(   IntPtr   hEnum   );   
          #endregion   
        
          #region   定义枚举常量   
          public   enum   RESOURCE_SCOPE   
          {   
            RESOURCE_CONNECTED   =   0x00000001,   
            RESOURCE_GLOBALNET   =   0x00000002,   
            RESOURCE_REMEMBERED   =   0x00000003,   
            RESOURCE_RECENT=   0x00000004,   
            RESOURCE_CONTEXT=   0x00000005   
          }   
        
          public   enum   RESOURCE_TYPE   
          {   
            RESOURCETYPE_ANY=   0x00000000,   
            RESOURCETYPE_DISK=   0x00000001,   
            RESOURCETYPE_PRINT   =   0x00000002,   
            RESOURCETYPE_RESERVED   =   0x00000008,   
          }   
        
          public   enum   RESOURCE_USAGE   
          {   
            RESOURCEUSAGE_CONNECTABLE   =0x00000001,   
            RESOURCEUSAGE_CONTAINER=0x00000002,   
            RESOURCEUSAGE_NOLOCALDEVICE   =0x00000004,   
            RESOURCEUSAGE_SIBLING=0x00000008,   
            RESOURCEUSAGE_ATTACHED=0x00000010,   
            RESOURCEUSAGE_ALL   =(RESOURCEUSAGE_CONNECTABLE   |   RESOURCEUSAGE_CONTAINER   |   RESOURCEUSAGE_ATTACHED),   
          }   
        
          public   enum   RESOURCE_DISPLAYTYPE   
          {   
            RESOURCEDISPLAYTYPE_GENERIC=   0x00000000,   
            RESOURCEDISPLAYTYPE_DOMAIN=   0x00000001,   
            RESOURCEDISPLAYTYPE_SERVER=   0x00000002,   
        
            RESOURCEDISPLAYTYPE_SHARE=   0x00000003,   
            RESOURCEDISPLAYTYPE_FILE   =   0x00000004,   
            RESOURCEDISPLAYTYPE_GROUP=   0x00000005,   
            RESOURCEDISPLAYTYPE_NETWORK=   0x00000006,   
            RESOURCEDISPLAYTYPE_ROOT   =   0x00000007,   
            RESOURCEDISPLAYTYPE_SHAREADMIN   =   0x00000008,   
            RESOURCEDISPLAYTYPE_DIRECTORY   =   0x00000009,   
            RESOURCEDISPLAYTYPE_TREE   =   0x0000000A,   
            RESOURCEDISPLAYTYPE_NDSCONTAINER   =   0x0000000B   
          }   
        
          public   struct   NETRESOURCE   
          {   
            public   RESOURCE_SCOPE   dwScope;   
            public   RESOURCE_TYPE   dwType;   
            public   RESOURCE_DISPLAYTYPE   dwDisplayType;   
            public   RESOURCE_USAGE   dwUsage;   
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)]   public   string   lpLocalName;   
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)]   public   string   lpRemoteName;   
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)]   public   string   lpComment;   
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)]   public   string   lpProvider;   
          }   
        
          public   enum   NERR   
          {   
            NERR_Success   =   0,/*   Success   */   
            ERROR_MORE_DATA   =   234,   //   dderror   
            ERROR_NO_BROWSER_SERVERS_FOUND   =   6118,   
            ERROR_INVALID_LEVEL   =   124,   
            ERROR_ACCESS_DENIED   =   5,   
            ERROR_INVALID_PARAMETER   =   87,   
            ERROR_NOT_ENOUGH_MEMORY   =   8,   
            ERROR_NETWORK_BUSY   =   54,   
            ERROR_BAD_NETPATH   =   53,   
            ERROR_NO_NETWORK   =   1222,   
            ERROR_INVALID_HANDLE_STATE   =   1609,   
            ERROR_EXTENDED_ERROR=   1208   
          }   
          #endregion   
        
        
          #region   开始列举网络函数   
          public   TreeNode   pNode1;   
          public   TreeNode   pNode2;   
          public   TreeNode   pNode3;   
          private   void   WNETOE(Object   o)   
          {   
            int   iRet;   
            IntPtr   ptrHandle   =   new   IntPtr();   
            try   
            {   
              iRet   =WNetOpenEnum(RESOURCE_SCOPE.RESOURCE_GLOBALNET,RESOURCE_TYPE.RESOURCETYPE_ANY,RESOURCE_USAGE.RESOURCEUSAGE_ALL,o,out   ptrHandle   );   
              if(   iRet   !=   0   )return;     
        
              int   entries;   
              int   buffer   =   16384;   
              IntPtr   ptrBuffer   =   Marshal.AllocHGlobal(buffer);   
              NETRESOURCE   nr;   
                
              for(;;)   
              {   
                entries   =   -1;   
                buffer   =   16384;   
                iRet   =WNetEnumResource(ptrHandle,ref   entries,ptrBuffer,ref   buffer);   
                if((iRet   !=   0)   ||   (entries<1))break;   
        
                Int32   ptr   =   ptrBuffer.ToInt32();   
                for(int   i=0;i<entries;i++   )   
                {   
                  nr   =   (NETRESOURCE)Marshal.PtrToStructure(   new   IntPtr(ptr),   typeof(NETRESOURCE)   );   
                  if(RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER   ==   (nr.dwUsage   &   RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER))   
                  {   
                      
                    ptr   +=   Marshal.SizeOf(   nr   );   
                    if(nr.dwDisplayType   ==   RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_NETWORK)   
                    {   
                      pNode1   =   tView.Nodes.Add(nr.lpRemoteName);//TreeView   
                      pNode1.ImageIndex   =   0;   
                      pNode1.SelectedImageIndex   =   0;   
                    }   
                    else   if(nr.dwDisplayType   ==   RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_DOMAIN)   
                    {   
                      pNode2   =   pNode1.Nodes.Add(nr.lpRemoteName);   
                      pNode2.ImageIndex   =   1;   
                      pNode2.SelectedImageIndex   =1;   
                    }   
                    else   if(nr.dwDisplayType   ==   RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SERVER)   
                    {   
                      string   sPCName   =   nr.lpRemoteName;   
                      pNode3   =   pNode2.Nodes.Add(sPCName.Substring(2,sPCName.Length-2));\\此处为去处机器名称前的两个"\\"字符   
                      pNode3.ImageIndex   =   2;   
                      pNode3.SelectedImageIndex   =   2;   
                    }   
        
                    WNETOE(nr);   
                  }   
                    
                }   
              }   
              Marshal.FreeHGlobal(   ptrBuffer   );   
              iRet   =WNetCloseEnum(   ptrHandle   );   
            }   
            catch(Exception   ex)   
            {   
              MessageBox.Show("查找本地网络错误:"+ex.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);   
            }   
          }   
        
          #endregion   
        
          //窗体LOAD事件中,使用函数   
          private   void   frmDBConnConfig_Load(object   sender,   System.EventArgs   e)   
          {   
            WNETOE(null);   
          }