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
奇怪吧?
答案 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地址。