我正在通过套接字(c++客户端)发送一个端口号(ushort,2个字节),然后再使用htons将其转换为网络字节。

使用C#服务器接收时,我使用IPAddress.NetworkToHostOrder对其进行了转换,并且编号完全不同。

htons(8085) -> 38175 ??
IPAddress.NetworkToHostOrder(38175) -> ??

是什么原因造成的?

最佳答案

与BSD套接字API(每个函数都有一个单独的名称)不同,.NET中NetworkToHostOrder方法已重载,并可能根据输入的大小执行ntohsntohl

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

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

IPAddress.NetworkToHostOrder((short)38175)

10-06 01:03