可以实现,但是要先看一下TCP/IP的协议,特别是NetBIOS的,这个协议做在传输层以上,因此可以用Socket实现

解决方案 »

  1.   

    下面是一个vc搜索局域网共享的代码,翻译成vb就行
    void CShareDlg::EnumNetRes(NETRESOURCE *nr)
    {
    HANDLE hEnum;
      //NetResource 为 NULL 的话表明要遍历局域网所有的资源
      if(WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,
          RESOURCEUSAGE_CONTAINER|RESOURCEUSAGE_CONNECTABLE
          ,nr,&hEnum)!=NO_ERROR)
      {
        
        return;
        
      }
      //遍历所有的资源
      DWORD Count=-1;
      DWORD BufferSize=0;
      DWORD ReturnVal=0;
      //为 NetResource 数组分配空间
      NETRESOURCE *NetRes=(NETRESOURCE*)new char[1024];
      ZeroMemory(NetRes,sizeof(NETRESOURCE));
      for(;;)
      {
        ReturnVal=WNetEnumResource(hEnum,&Count,NetRes,&BufferSize);
        if(ReturnVal==ERROR_MORE_DATA)  //由我们设置 NetRes 的大小
        {
          //但如果数据量超出了我们设置的大小
          Count=-1;
          delete[] NetRes;
          NetRes=(NETRESOURCE*)new char[BufferSize];
          ZeroMemory(NetRes,sizeof(NETRESOURCE));
          ReturnVal=WNetEnumResource(hEnum,&Count,NetRes,&BufferSize);
        }
        if(ReturnVal!=NO_ERROR)break;
        // 加到 ListBox
        for (unsigned int i=0;i<Count;i++)
        {
          m_Enum.AddString(NetRes[i].lpRemoteName);
                if((NetRes[i].dwUsage & RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER)
              EnumNetRes(&NetRes[i]);
        }
        if(ReturnVal==ERROR_NO_MORE_ITEMS)
        {
          //遍历完成
          delete[] NetRes;
          WNetCloseEnum(hEnum);
          //RaiseLastWin32Error();
        }
      }
      delete[] NetRes;
      WNetCloseEnum(hEnum);}