0
我正在編寫一個程序,它將確定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
不工作?
僅供參考:http://msdn.microsoft.com/en-us/library/aa329627%28v=vs.71%29.aspx – alk 2013-02-15 07:32:32
@utopianheaven:使用'Int16'返回'-5527'並使用該值就像'Int32'返回'-362217472'。而當我使用移位邏輯時,返回的值是'60009'。 – jags 2013-02-15 08:23:20
@jags:你快到了......注意到「-5527 +(2^16)= 60009」。您需要使用IPAddress.HostToNetworkOrder的Int16版本(因爲「UInt16」不可用),但是將它們作爲UInt16進行比較。 – utopianheaven 2013-02-15 19:08:43