【问题标题】:Why does converting ushort port number from htons to ntohs in C# give different result?为什么在 C# 中将 ushort 端口号从 htons 转换为 ntohs 会产生不同的结果?
【发布时间】:2017-05-08 07:23:55
【问题描述】:
我通过套接字(c++ 客户端)发送一个端口号(ushort,2 个字节),然后使用 htons 将其转换为网络字节。
接收时,使用 C# 服务器,我使用 IPAddress.NetworkToHostOrder 进行转换,数字完全不同。
htons(8085) -> 38175 ??
IPAddress.NetworkToHostOrder(38175) -> ??
这是什么原因?
【问题讨论】:
标签:
c++
winapi
networking
【解决方案1】:
与 BSD 套接字 API 不同,其中每个函数都有一个单独的名称,在 .NET 中,NetworkToHostOrder 方法被重载,并且可以执行 ntohs 或 ntohl,具体取决于输入的大小。
您传入一个 32 位整数输入(int 是 C# 看到文字时的默认类型,除非它不适合),因此您会得到与 ntohl 相同的结果而不是 ntohs .
如果您想要ntohs 行为,请更改输入类型,例如
IPAddress.NetworkToHostOrder((short)38175)