Nat*_*ver 2 vb.net networking system.net ip-address
我正在编写一个(相当简单的)网络应用程序,并使用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)
Run Code Online (Sandbox Code Playgroud)
它返回地址为25.240.1.0.从我对文档的理解,127001应该回归127.0.0.1......也许我错过了那里的东西?http://msdn.microsoft.com/en-us/library/13180abx.aspx
你误解了它是如何工作的.IP地址由4个字节组成,表示它们127.0.0.1只是一个人类可读的约定.在引擎盖下,127.0.0.1表示为((127 << 24) | (0 << 16) | (0 << 8) | 1).在您的情况下,使用这样的方法会更容易,更易读.Parse(string):
IPAddress.Parse("127.0.0.1");
简短回答:使用 TcpClient.Connect( String, Int ) 代替;它接受 IPv4/IPv6 地址或主机名/别名,因此您不仅限于通过 IP 进行连接。例如:
Dim client As TcpClient
client.Connect( "localhost", 27488 )
client.Connect( "127.0.0.1", 27488 )
Run Code Online (Sandbox Code Playgroud)
但是 25.240.1.0 是从哪里来的呢?请尝试以下操作:
127001,然后切换到十六进制0001F01900 01 F0 1919 F0 01 0025 240 1 025.240.1.0为什么要反转字节?你的处理器架构是小端的;数字在内存中以最低有效字节在前表示。IPv4 地址被标准化为大端格式(最重要的字节在前;又名网络顺序)。该IPAddress( Int64 )构造正反转字节从LE转换为BE。
颠倒上述步骤,IPAddress( Int64 )构造函数中环回的正确值将是&H0100007F(hex) 或16777343(decimal)。
该IPAddress( Byte[4] )构造函数采用在网络顺序的字节数组,所以这将是New Byte() { 127, 0, 0, 1 }
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |