Visual Basic 9 / Visual Studio 2008 IPAddress.Parse () не работает? Прошелся вокруг - PullRequest
1 голос
/ 13 мая 2011

РЕДАКТИРОВАТЬ Я случайно нашел обход этой проблемы ... Добавление следующей строки в начале функции по какой-то причине решило проблему ...

remoteIPAdress = remoteIPAdress & "END"

Здравствуйте.У меня есть школьное задание, где я должен создать простой мессенджер TCP / IP в Visual Basic ... Проблема заключается в том, что когда клиент отправляет свой IP в построенном мной запросе ("LetMeIn \ XXX.XXX.XXX.XXX "), даже если сервер получает запрос, как и должен, он анализирует его совершенно неправильно ...

Точнее, когда я запускаю этот фрагмент, я получаю следующие результаты:

Private Function findFreeIPEndPoint(ByVal remoteIPAdress As String) As IPEndPoint
    Dim ipEndPoint As IPEndPoint

    System.Diagnostics.Debug.Write("LOL! The IP adress you try to parse is " & remoteIPAdress)
    System.Diagnostics.Debug.WriteLine("The parsed result is " & String.Concat(IPAddress.Parse(remoteIPAdress)))
    ipEndPoint = New IPEndPoint(IPAddress.Parse(remoteIPAdress), 1003 + topUniqueId)
    MessageBox.Show(String.Concat(ipEndPoint.Address))
    System.Diagnostics.Debug.Write("The IP adress you got is " & String.Concat(ipEndPoint.Address))

    Try
        listener(ipEndPoint.Port - 1003).Start()
    Catch ex As Exception

    End Try

    topUniqueId = topUniqueId + 1

    Return ipEndPoint
End Function

Вывод:

LOL!IP-адрес, который вы пытаетесь проанализировать: 192.168.1.65

Первое исключение типа «System.FormatException» произошло в System.dll

Если я изменил следующую строку

ipEndPoint = New IPEndPoint(IPAddress.Parse(remoteIPAdress), 1003 + topUniqueId)

до

ipEndPoint = New IPEndPoint("192.168.1.65", 1003 + topUniqueId)

Я получаю это:

The IP adress you got is 229.64.116.11

Странно, верно?

1 Ответ

3 голосов
/ 13 мая 2011

Edit:

С отредактированным вопросом, я предполагаю, что ввод не "192.168.1.65 ", но на самом деле содержит отступы. Возможно, так просто, как "192.168.1.65 ". Проверьте строку тщательно Черт возьми, сначала проверь .Length, а затем посимвольно.


Оригинальный ответ на основании исходного вопроса

Я не верю, что вывод, который вы выводите, является верным, отчасти из-за отсутствующего LOL! Но также у вас есть одно из чисел, жестко запрограммированных; обязательно должно быть:

 ipEndPoint = New IPEndPoint(IPAddress.Parse(remoteIPAdress),1003 + topUniqueId)

Также имейте в виду разницу между локальным IP и публичным IP. IP 192.168 - это ваша локальная сеть. У удаленных клиентов этого не будет, но они будут использовать общедоступный IP-адрес, транслируемый через их маршрутизатор / прокси / что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...