为什么在C#中将ushort端口号从htons转换为ntohs给出不同的结果?

J. *_*Doe 1 c++ networking winapi

我在使用htons将其转换为网络字节之前,通过套接字(c ++客户端)发送端口号(ushort,2个字节).

当使用C#服务器接收时,我正在使用它进行转换,IPAddress.NetworkToHostOrder数字完全不同.

htons(8085) -> 38175 ??
IPAddress.NetworkToHostOrder(38175) -> ??
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

Ben*_*igt 5

不同于BSD套接字API,那里的每个功能的单独的名称,在.NET的NetworkToHostOrder方法过载,并且可以执行任一ntohsntohl对输入的大小取决于.

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

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

IPAddress.NetworkToHostOrder((short)38175) 
Run Code Online (Sandbox Code Playgroud)