vb6 winsock控件RemoteHostIP截断IP地址的最后一位数字

时间:2010-07-08 13:37:26

标签: vb6 tcp network-programming sockets winsock

您好我正在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”

2 个答案:

答案 0 :(得分:0)

我尝试了完全相同的代码,它可以在我的机器上运行。我尝试使用来自同一台机器的telnet,也使用笔记本电脑,并在两种情况下都打印了正确的IP地址。

我必须同意ckv并说明你打印RemoteHostIP的方式。

答案 1 :(得分:0)

这是v1和2009年5月v2中KB957924 Microsoft Visual Basic 6.0 Service Pack 6累积更新(link)中的已知错误。这就是为什么有些人可以复制它而有些人不能复制它。它也仅限于控件的第二次和后续使用。

讨论了here

作为一个非常丑陋的解决方法,您可以使用recvfromwsock32.dll一个小缓冲区和sockMain.SocketHandle参数(MSG_PEEK)在&H2 lib中调用sockMain.GetData()直接检索套接字地址。必须在致电{{1}}之前完成此操作。然后你必须自己解析IP地址。我可以发布为我正在使用的特定情况(UDP)执行此操作的代码。

我不确定它会在您的情况下有效,因为它看起来像您正在使用TCP和接受。