您好我正在VB6中编写套接字客户端/服务器应用程序。 我有以下代码
Private Sub sockMain_ConnectionRequest(ByVal requestID As Long)
If sockMain.State <> sckClosed Then
sockMain.Close
End If
sockMain.Accept requestID
Debug.Print "Accepted connection from: " & sockMain.RemoteHostIP & vbCrLf
End Sub
打印IP,但最后一位数字缺少示例,如果我的连接来自“192.168.1.123”,那么它只显示“192.168.1.12”
答案 0 :(得分:0)
我尝试了完全相同的代码,它可以在我的机器上运行。我尝试使用来自同一台机器的telnet,也使用笔记本电脑,并在两种情况下都打印了正确的IP地址。
我必须同意ckv并说明你打印RemoteHostIP
的方式。
答案 1 :(得分:0)
这是v1和2009年5月v2中KB957924 Microsoft Visual Basic 6.0 Service Pack 6累积更新(link)中的已知错误。这就是为什么有些人可以复制它而有些人不能复制它。它也仅限于控件的第二次和后续使用。
讨论了here。
作为一个非常丑陋的解决方法,您可以使用recvfrom
,wsock32.dll
一个小缓冲区和sockMain.SocketHandle
参数(MSG_PEEK
)在&H2
lib中调用sockMain.GetData()
直接检索套接字地址。必须在致电{{1}}之前完成此操作。然后你必须自己解析IP地址。我可以发布为我正在使用的特定情况(UDP)执行此操作的代码。
我不确定它会在您的情况下有效,因为它看起来像您正在使用TCP和接受。