Visual Basic 9 / Visual Studio 2008 IPAddress.Parse()不起作用?走着走着,大约

时间:2011-05-12 21:30:54

标签: .net vb.net visual-studio-2008

编辑我偶然发现了这个问题...在函数开头添加以下行解决了问题...

remoteIPAdress = remoteIPAdress & "END"

您好。 我有一个学校作业,我应该在Visual Basic中构建一个简单的TCP / IP信使... 问题是,当客户端在我构建的请求(“LetMeIn \ XXX.XXX.XXX.XXX”)中发送他的IP时,即使服务器收到请求,它也会完全错误地解析它...

更确切地说,当我运行此代码段时,我得到了以下结果:

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.dll

中出现'System.FormatException'类型的第一次机会异常

如果我更改以下行

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 个答案:

答案 0 :(得分:3)

编辑:

根据编辑过的问题,我的猜测是输入不是"192.168.1.65“,但实际上包含填充。也许就像"192.168.1.65 "一样简单。仔细检查字符串 。哎呀,先检查.Length,然后逐个字符检查。


基于原始问题的原始答案

我不相信你显示的输出是真的,部分是因为缺少LOL!但是,你有一个硬编码的数字;当然应该是:

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

还要记住本地IP和公共IP之间的差异。一个192.168 IP是你的局域网。远程客户端不具备该功能,但将使用通过其路由器/代理/其他任何方式转换的公共IP地址。