vb6 winsock control RemoteHostIP усекает последнюю цифру с IP-адреса - PullRequest
1 голос
/ 08 июля 2010

Привет, я пишу клиент / серверное приложение для сокетов в 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 голосов
/ 28 сентября 2011

Это известная ошибка в KB957924 накопительном обновлении Microsoft Visual Basic 6.0 с пакетом обновления 6 ( ссылка ) как в v1, так и в май 2009 v2.Вот почему некоторые люди могут дублировать его, а некоторые нет.Он также ограничен вторым и последующим использованием элемента управления.

Это обсуждается здесь .

В качестве действительно уродливого обходного пути вы можете вызвать recvfrom вwsock32.dll lib с sockMain.SocketHandle, небольшим буфером и параметром MSG_PEEK (&H2) для непосредственного получения адреса сокета.Это необходимо сделать перед вызовом sockMain.GetData().Затем вы должны разобрать IP-адрес самостоятельно.Я могу опубликовать код, который делает это для конкретного случая, который я использую (UDP), если требуется.

Я не уверен, что он будет работать в вашем случае, так как похоже, что вы используете TCP и Accept.

0 голосов
/ 09 июля 2010

Я попробовал точно такой же код, и он работает на моей машине. Я попытался использовать telnet с того же компьютера, а также с ноутбука, и в обоих случаях был напечатан правильный IP-адрес.

Я должен согласиться с ckv и сказать, что вы печатаете RemoteHostIP.

...