client端函数如下:Private Sub Command1_Click() <--- CONNECT BUTTON Dim lsLocalAddr As String plsend_Hand = pfnc_ConnectSock("109.117.14.8", "9241", "", 0, False)
If plsend_Hand = INVALID_SOCKET Then
Label1.Caption = "Invalid Socket"
Else
Label1.Caption = "Connect Success"
End IfEnd Sub
Public Function pfnc_ConnectSock(ByVal Host As String, ByVal Port As Long, retIpPort As String, ByVal HWndToMsg As Long, ByVal Async As Boolean) As Long
Dim s As Long, SelectOps As Long, dummy As Long
Dim sockin As sockaddr
sockin = saZero
sockin.sin_family = AF_INET
sockin.sin_port = htons(Port)
If sockin.sin_port = INVALID_SOCKET Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
sockin.sin_addr = pfnc_GetHostByNameAlias(Host)
If sockin.sin_addr = INADDR_NONE Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
retIpPort = pfnc_GetAscIP(sockin.sin_addr) & ":" & ntohs(sockin.sin_port)
这里retIpPort 的值是 :109.117.14.8:9241 s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) <---- 这里出错,s=-1
If s < 0 Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
.......省略......
pfnc_ConnectSock = s
End Function
Public Function pfnc_GetAscIP(ByVal inn As Long) As String
Dim nStr As Long
Dim lpStr As Long
Dim retString As String
retString = String(32, 0)
lpStr = inet_ntoa(inn)
If lpStr Then
nStr = lstrlen(lpStr)
If nStr > 32 Then nStr = 32
MemCopy ByVal retString, ByVal lpStr, nStr
retString = Left(retString, nStr)
pfnc_GetAscIP = retString
Else
pfnc_GetAscIP = "255.255.255.255"
End If
End FunctionPublic Function pfnc_GetHostByNameAlias(ByVal HostName As String) As Long
Dim phe As Long
Dim heDestHost As HostEnt
Dim addrList As Long
Dim retIP As Long
retIP = inet_addr(HostName)
If retIP = INADDR_NONE Then
phe = gethostbyname(HostName)
If phe <> 0 Then
MemCopy heDestHost, ByVal phe, hostent_size
MemCopy addrList, ByVal heDestHost.h_addr_list, 4
MemCopy retIP, ByVal addrList, heDestHost.h_length
Else
retIP = INADDR_NONE
End If
End If
pfnc_GetHostByNameAlias = retIP
End Function服务器端绝对没有问题,我同事已经用他的CLIENT端程序测试过了,可以连上
希望有高人指点,谢谢!
If plsend_Hand = INVALID_SOCKET Then
Label1.Caption = "Invalid Socket"
Else
Label1.Caption = "Connect Success"
End IfEnd Sub
Public Function pfnc_ConnectSock(ByVal Host As String, ByVal Port As Long, retIpPort As String, ByVal HWndToMsg As Long, ByVal Async As Boolean) As Long
Dim s As Long, SelectOps As Long, dummy As Long
Dim sockin As sockaddr
sockin = saZero
sockin.sin_family = AF_INET
sockin.sin_port = htons(Port)
If sockin.sin_port = INVALID_SOCKET Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
sockin.sin_addr = pfnc_GetHostByNameAlias(Host)
If sockin.sin_addr = INADDR_NONE Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
retIpPort = pfnc_GetAscIP(sockin.sin_addr) & ":" & ntohs(sockin.sin_port)
这里retIpPort 的值是 :109.117.14.8:9241 s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) <---- 这里出错,s=-1
If s < 0 Then
pfnc_ConnectSock = INVALID_SOCKET
Exit Function
End If
.......省略......
pfnc_ConnectSock = s
End Function
Public Function pfnc_GetAscIP(ByVal inn As Long) As String
Dim nStr As Long
Dim lpStr As Long
Dim retString As String
retString = String(32, 0)
lpStr = inet_ntoa(inn)
If lpStr Then
nStr = lstrlen(lpStr)
If nStr > 32 Then nStr = 32
MemCopy ByVal retString, ByVal lpStr, nStr
retString = Left(retString, nStr)
pfnc_GetAscIP = retString
Else
pfnc_GetAscIP = "255.255.255.255"
End If
End FunctionPublic Function pfnc_GetHostByNameAlias(ByVal HostName As String) As Long
Dim phe As Long
Dim heDestHost As HostEnt
Dim addrList As Long
Dim retIP As Long
retIP = inet_addr(HostName)
If retIP = INADDR_NONE Then
phe = gethostbyname(HostName)
If phe <> 0 Then
MemCopy heDestHost, ByVal phe, hostent_size
MemCopy addrList, ByVal heDestHost.h_addr_list, 4
MemCopy retIP, ByVal addrList, heDestHost.h_length
Else
retIP = INADDR_NONE
End If
End If
pfnc_GetHostByNameAlias = retIP
End Function服务器端绝对没有问题,我同事已经用他的CLIENT端程序测试过了,可以连上
希望有高人指点,谢谢!
需要先做这一步
WSAStartup(&H101, StartupData)