注册 登录
编程论坛 VB6论坛

请问,如何用nas的名字登录?而不是IP,谢谢!

mansohu 发布于 2015-01-15 10:45, 366 次点击
我有个 nas , 以前我是通过 IP 连接并读取内容,代码如下:
      Shell Environ("comspec") & " /c net use " & IPadssAndDir & "ipc$ ""xxx"" /user:""xxx""", vbHide

但后来,根据需要,会时常改变 nas 的 IP 位置,就不得不经常修改代码,
请问,能否用该 nas 的名字连接?而不是IP,或者有什么其它方法解决这个问题?谢谢!
1 回复
#2
lianyicq2015-01-15 11:19
NAS是基于IP协议的,服务依赖于IP地址.如果不想经常改代码.可以考虑把IPadssAndDir 换为由文本框输入的IP地址变量与路径组合.每次运行的时候,输入IP地址.
能不能每次运行时先通过MAC地址,找到IP地址?
MAC地址固定,可采用arp-a>temp.txt,得到MAC与IP地址对应列表,然后在temp.txt中查找对应的IP地址
也可用gethostbyname的办法把机器名转为IP地址,
程序代码:
Option Explicit

Private Type WSADATA
    wversion As Integer
    wHighVersion As Integer
    szDescription(0 To 256) As Byte
    szSystemStatus(0 To 128) As Byte
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpszVendorInfo As Long
End Type

Private Type HOSTENT
   hName      As Long
   hAliases   As Long
   hAddrType  As Integer
   hLen       As Integer
   hAddrList  As Long
End Type

Private Const WS_VERSION_REQD = &H101
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)


Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHostname As String) As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Integer, lpWSAData As WSADATA) As Long

Private Sub Command1_Click()
Dim i As Integer
Dim sIPAddr As String
Dim HOST As HOSTENT
Dim lpHost As Long
Dim dwIPAddr  As Long
Dim tmpIPAddr() As Byte
Dim udtWSAD As WSADATA
Call WSAStartup(WS_VERSION_REQD, udtWSAD)
lpHost = gethostbyname("www.baidu.com")
CopyMemory HOST, lpHost, Len(HOST)
CopyMemory dwIPAddr, HOST.hAddrList, 4
ReDim tmpIPAddr(1 To HOST.hLen)
CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
For i = 1 To HOST.hLen
    sIPAddr = sIPAddr & tmpIPAddr(i) & "."
Next
Form1.Caption = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
End Sub
你可以用上述代码测试.

[ 本帖最后由 lianyicq 于 2015-1-15 12:55 编辑 ]
1