Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将端口号转换为网络字节顺序?_C#_.net_Network Programming - Fatal编程技术网

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

C# 如何将端口号转换为网络字节顺序?,c#,.net,network-programming,C#,.net,Network Programming,我正在编写一个程序,用于确定C#Net中端口的进程id 在iphlapi.dll中有一个函数GetExtendedTcpTable,它返回TcpTable。获取表后,我将遍历行并解析端口号 现在,为了比较端口号,我使用IPAddress.HostToNetworkOrder将27144端口号转换为网络字节顺序,并使用Marshal.ReadInt32与其他端口号进行比较。这种比较是行不通的。i、 没有结果匹配 如果不使用IPAddress.HostToNetworkOrder,我将使用以下逻辑

我正在编写一个程序,用于确定C#Net中端口的进程id

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

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

如果不使用
IPAddress.HostToNetworkOrder
,我将使用以下逻辑

((27144 & 0xFF) << 8) + ((27144 & 0xFF00) >> 8) == Marshal.ReadInt32(portAddress)
((27144&0xFF)>8)=封送处理ReadInt32(portAddress)
我能够确定流程id,即其中一个结果匹配


您能告诉我为什么
IPAddress.HostToNetworkOrder
不起作用吗?

您可能在中使用了
dwLocalPort
/
dwRemotePort
中的
DWORD
。DWORD肯定不会是16位的,您可能会将其称为32位版本的。。。在使用
IPAddress.HostToNetworkOrder
函数之前,您应该尝试将其强制转换为
Int16

参考:@utopiangoven:use
Int16
返回
-5527
并使用原样值,即
Int32
返回
-362217472
。而当我使用移位逻辑时,返回的值是
60009
@jags:You'sneep's。。。请注意
-5527+(2^16)=60009
。您需要使用IPAddress.HostToNetworkOrder的
Int16
版本(因为
UInt16
不可用),然后将它们作为
UInt16
s进行比较。将结果转换为
UInt16
后,我得到
60009
。因此,
Int32
的符号性质让我感到困惑。非常感谢。我将学习更多关于这方面的东西,以供我自己学习。