如何将端口号转换为网络字节顺序?

时间:2013-02-15 06:54:53

标签: c# .net network-programming

我正在编写一个程序来确定C#.Net中端口的进程ID。

GetExtendedTcpTable中有一个函数IpHlpApi.dll,它返回TcpTable。获取表后,我正在遍历行并解析端口号。

现在,为了比较端口号,我使用IPAddress.HostToNetworkOrder将27144端口号转换为网络字节顺序,并使用Marshal.ReadInt32与其他端口号进行比较。比较不起作用。即没有结果匹配。

如果不是使用IPAddress.HostToNetworkOrder,而是使用以下逻辑

((27144 & 0xFF) << 8) + ((27144 & 0xFF00) >> 8) == Marshal.ReadInt32(portAddress)

我能够确定进程ID,即其中一个结果匹配。

你能告诉我为什么IPAddress.HostToNetworkOrder无效吗?

1 个答案:

答案 0 :(得分:2)

您可能正在TcpRow使用DWORD / dwLocalPort中的dwRemotePort。 DWORD当然不会是16位,你可能会调用32位版本的IPAddress.HostToNetworkOrder ...在使用{{{}}之前你应该尝试将其强制转换为Int16 1}}功能。