我正在编写一个(相当简单的 :) 网络应用程序,并且正在使用 localhost:27488 ( 127.0.0.1:27488 ) 对其进行测试。
我正在使用 System.Net.Sockets.TcpClient 进行连接,它需要一个 System.Net.IPAddress 来指定主机......唯一的是,我不知道如何使用正确的 IP 地址初始化类。我查看了 MSDN 文档,它说地址需要 Byte(4)Int64 ( long )。
问题是,当我像这样初始化 IPAddress 时:

Dim ipAddr As New System.Net.IPAddress(127001)

它将地址返回为 25.240.1.0 。根据我从文档中的理解,127001 应该返回 127.0.0.1 ......也许我错过了一些东西? http://msdn.microsoft.com/en-us/library/13180abx.aspx

最佳答案

简短回答:使用 TcpClient.Connect( String, Int ) 代替;它接受 IPv4/IPv6 地址或主机名/别名,因此您不仅限于通过 IP 进行连接。例如。:

Dim client As TcpClient
client.Connect( "localhost", 27488 )
client.Connect( "127.0.0.1", 27488 )

但是 25.240.1.0 是从哪里来的呢?请尝试以下操作:
  • 打开Calc,切换到Programmer view,选择Dec
  • 输入 127001 ,然后切换到十六进制
  • 写出结果,在左边添加零以填充到 4 个字节/32 位: 0001F019
  • 将该数字分成单独的字节: 00 01 F0 19
  • 反转字节顺序:19 F0 01 00
  • 将每个字节转换回十进制:25 240 1 0
  • 带点:25.240.1.0

  • 为什么要反转字节?你的处理器架构是小端的;数字在内存中以最低有效字节在前表示。 IPv4 地址标准化为 big-endian 格式(最重要的字节在前;又名网络顺序)。 IPAddress( Int64 ) 构造函数正在反转字节以从 LE 转换为 BE。

    颠倒上述步骤,IPAddress( Int64 ) 构造函数中环回的正确值将是 &H0100007F(十六进制)或 16777343(十进制)。
    IPAddress( Byte[4] ) 构造函数以网络顺序获取字节数组,因此这将是 New Byte() { 127, 0, 0, 1 }

    关于vb.net - System.Net.IPAddress 返回奇怪的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6929487/

    10-11 18:56