【问题标题】: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 方法被重载,并且可以执行 ntohsntohl,具体取决于输入的大小。

    您传入一个 32 位整数输入(int 是 C# 看到文字时的默认类型,除非它不适合),因此您会得到与 ntohl 相同的结果而不是 ntohs .

    如果您想要ntohs 行为,请更改输入类型,例如

    IPAddress.NetworkToHostOrder((short)38175) 
    

    【讨论】:

    • 谢谢,现在说得通了。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多