【问题标题】:Visual Basic 9 / Visual Studio 2008 IPAddress.Parse() doesn't work? Walked-AroundVisual Basic 9 / Visual Studio 2008 IPAddress.Parse() 不起作用?走来走去
【发布时间】:2011-05-12 21:30:53
【问题描述】:

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

remoteIPAdress = remoteIPAdress & "END"

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

更准确地说,当我运行这个 sn-p 时,我得到了这些结果:

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

输出:

哈哈!你尝试解析的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

很奇怪吧?

【问题讨论】:

  • 您的代码没有显示的一件事是 IPAddress.Parse...?
  • 提示:在您说 IPAddress.Parse 中存在错误之前,最好实际调用该方法。如果您因为遇到异常而无法解析地址,也许您应该首先关注该问题。
  • 我编辑了我的帖子以显示整个函数...我在第 4 行调用该方法并收到格式异常...

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


【解决方案1】:

编辑:

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


基于原始问题的原始答案

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

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

还要记住本地 IP 和公共 IP 之间的区别。 192.168 IP 是您的 LAN。远程客户端不会有这个,但会使用通过他们的路由器/代理/任何东西转换的公共 IP 地址。

【讨论】:

  • 我在粘贴代码时忘记添加此行...当此行运行时,它会抛出未处理的格式异常/指定了无效的 IP 地址。”异常...硬编码的数字是要显示服务器接收到的字符串... P.S. 我想要的是让这个信使无论如何都在本地网络中工作,所以没关系...
  • 那你的问题没有意义。你不能说“X 中的错误,我得到了错误的值”,然后说“老实说,我不能调用 X,因为它崩溃了”。要么你调用了它,得到了错误的值,要么你没有调用它,因为它崩溃了,你不能同时做这两个。
  • 对不起,如果我没有把自己说清楚......现在帖子已经完成,所有细节......
  • @Loupax - 什么是remoteIPAdress.Length
  • @Marc Gravell MessageBox.Show(String.Concat(remoteIPAdress.Length)) 显示我 13
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多