当前位置:编程学习 > VB >>

vb 如何获取网上邻居目录及计算机名和ip地址?

条件:1\首先获取网上邻居目录
     2\当点击网上邻居目录列表时,调出此目录下的所有计算机名.
     3\当选择某个计算机名时,调出对应的ip地址.


最后:如何优化.我有如何取得计算机名及ip地址,但是相应的速度慢的惊人.


结果:相当于用友的登陆服务器界面,感觉用友的服务器寻址速度很快,它的思路又是怎么样的呢?

谢谢!如果能提出实例更好.

如图 --------------------编程问答-------------------- 虽然看不到图,也没用过用友,不过仅获取有指定程序在运行的计算机列表是不一样的。
只要约定好端口,需要取列表的计算机只要通过 winsock 之类发一个广播,其他计算机上的程序就会直接把需要的信息反馈回来。这比逐个检测快多了。
--------------------编程问答-------------------- 2\当点击网上邻居目录列表时,调出此目录下的所有计算机名.
用shell 执行 net view >name.txt 获取所有在线的计算机名,如:
\\PC-200907151525
\\PC-200908111008
\\PC-201002041000
\\PC-201004171507
...

3\当选择某个计算机名时,调出对应的ip地址.
用shell 执行 ping 计算机名 >ip.txt 得ip

自己读取文本分析一下 --------------------编程问答--------------------
引用 2 楼 asftrhgjhkjlkttttttt 的回复:
2\当点击网上邻居目录列表时,调出此目录下的所有计算机名.
用shell 执行 net view >name.txt 获取所有在线的计算机名,如:
\\PC-200907151525
\\PC-200908111008
\\PC-201002041000
\\PC-201004171507
...

3\当选择某个计算机名时,调出对应的ip地址.
用shell 执行 ping 计……


好办法!

net view 命令还真没用过,虽然获取 IP 地址通过 API 能实现,但 PING 应该是最可靠的吧! --------------------编程问答-------------------- 用api,但怎么获取目录呢?是不是有点难呢? --------------------编程问答-------------------- --------------------编程问答-------------------- 这是获取ip地址代码,我经测试通过.但是我无法获取网络资源的目录列表,怎么根据列表获取列表目下的网络资源.请高手帮个忙.我可以把ip,及网络资源计算机名的源码公布.
Option Explicit
        
  Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
  Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long
  Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
  Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
  Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    
  '     Socket错误常数和版本常数
  Private Const SOCKET_ERROR       As Long = -1
  Private Const MAX_WSADescription = 256
  Private Const MAX_WSASYSStatus = 128
  Private Const ERROR_SUCCESS                   As Long = 0
  Private Const WS_VERSION_REQD               As Long = &H101
  Private Const MIN_SOCKETS_REQD             As Long = 1
  Private Const WS_VERSION_MAJOR             As Long = WS_VERSION_REQD \ &H100 And &HFF&
  Private Const WS_VERSION_MINOR             As Long = WS_VERSION_REQD And &HFF&
    
  '     存放主机信息的结构
  Private Type HOSTENT
          hName             As Long           '     主机的正式名称
          hAliases       As Long           '     主机别名列表
          hAddrType     As Integer     '     主机地址类型
          hLen               As Integer     '     主机地址长度
          hAddrList     As Long           '     主机IP地址列表
  End Type
    
  '     存放Winsock版本等信息的结构
  Private Type WSADATA
          wVersion             As Integer
          wHighVersion     As Integer
          szDescription(0 To MAX_WSADescription)           As Byte
          szSystemStatus(0 To MAX_WSASYSStatus)             As Byte
          wMaxSockets       As Integer
          wMaxUDPDG           As Integer
          dwVendorInfo     As Long
  End Type
    
  '     返回给定机器名的Ip地址,机器名为空时返回本机Ip地址
  Private Function GetIPAddress(Optional sHost As String) As String
          Dim sHostName         As String * 256
          Dim lpHost               As Long
          Dim HOST                   As HOSTENT
          Dim dwIPAddr           As Long
          Dim tmpIPAddr()     As Byte
          Dim i                         As Integer
          Dim sIPAddr             As String
          Dim werr                   As Long
            
          '     如果无法初始化Socket则退出函数
          If Not SocketsInitialize() Then
                  GetIPAddress = ""
                  Exit Function
          End If
            
          '     如果未指定主机名称,则取得本地主机名称并获取其IP
          If sHost = "" Then
                  If gethostname(sHostName, 256) = SOCKET_ERROR Then
                          werr = WSAGetLastError()
                          GetIPAddress = ""
                          SocketsCleanup
                          Exit Function
                  End If
    
                  sHostName = Trim$(sHostName)
          Else
                  sHostName = Trim$(sHost) & Chr$(0)
          End If
            
          '     获得指向主机信息结构的指针
          lpHost = gethostbyname(sHostName)
    
          '     如果指针为零,则错误退出
          If lpHost = 0 Then
                  werr = WSAGetLastError()
                  GetIPAddress = ""
                  SocketsCleanup
                  Exit Function
          End If
            
          '     从指定内存取得数据
          CopyMemory HOST, lpHost, Len(HOST)
          CopyMemory dwIPAddr, HOST.hAddrList, 4
            
          '     重新动态分配变量内存
          ReDim tmpIPAddr(1 To HOST.hLen)
          '     将主机地址存储到tmpIPAddr中
          CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
            
          '     获得最终的主机IP地址字符串
          For i = 1 To HOST.hLen
                  sIPAddr = sIPAddr & tmpIPAddr(i) & "."
          Next
    
          '     返回
          GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
            
          '   释放Socket库所占用的系统资源
          SocketsCleanup
  End Function
    
  '     初始化Socket
  Private Function SocketsInitialize(Optional sErr As String) As Boolean
          Dim WSAD     As WSADATA
          Dim sLoByte     As String
          Dim sHiByte     As String
            
          '     初始化Winsock   DLL,并判断版本是否满足要求
          If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
                  sErr = "The   32-bit   Windows   Socket   is   not   responding."
                  SocketsInitialize = False
                  Exit Function
          End If
            
          '     判断是否有支持足够的Socket
          If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
                  sErr = "This   application   requires   a   minimum   of   " & _
                                  CStr(MIN_SOCKETS_REQD) & "   supported   sockets."
                  SocketsInitialize = False
                  Exit Function
          End If
            
          '     判断Winsock的版本是否被32为Winsock支持
          If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _
                          (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _
                          HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
    
                  sHiByte = CStr(HiByte(WSAD.wVersion))
                  sLoByte = CStr(LoByte(WSAD.wVersion))
    
                  sErr = "Sockets   version   " & sLoByte & "." & sHiByte & _
                                  "   is   not   supported   by   32-bit   Windows   Sockets."
    
                  SocketsInitialize = False
                  Exit Function
          End If
            
          SocketsInitialize = True
  End Function
    
  '   释放Socket库所占用的系统资源
  Private Sub SocketsCleanup()
          If WSACleanup() <> ERROR_SUCCESS Then
                  App.LogEvent "Socket   error   occurred   in   Cleanup.", vbLogEventTypeError
          End If
  End Sub
    
  '     获得一个整数的高字节位
  Private Function HiByte(ByVal wParam As Integer)
          HiByte = wParam \ &H1 And &HFF&
  End Function
    
  '     获得一个整数的低字节位
  Private Function LoByte(ByVal wParam As Integer)
          LoByte = wParam And &HFF&
  End Function
    
  Private Sub Command1_Click()
          On Error Resume Next
          Screen.MousePointer = vbHourglass
          TxtIp.Text = GetIPAddress(TxtCmpName.Text)
          Screen.MousePointer = vbDefault
  End Sub --------------------编程问答-------------------- 可惜啊,没有高手进来吗?
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,