我正在通过套接字(c++客户端)发送一个端口号(ushort,2个字节),然后再使用htons将其转换为网络字节。
使用C#服务器接收时,我使用IPAddress.NetworkToHostOrder
对其进行了转换,并且编号完全不同。
htons(8085) -> 38175 ??
IPAddress.NetworkToHostOrder(38175) -> ??
是什么原因造成的?
最佳答案
与BSD套接字API(每个函数都有一个单独的名称)不同,.NET中NetworkToHostOrder
方法已重载,并可能根据输入的大小执行ntohs
或ntohl
。
您传入的是32位整数输入(当C#看到文字时,除非它不合适,否则int
是默认类型),因此,您得到的结果与ntohl
而不是ntohs
相同。
如果您想要ntohs
行为,请更改输入类型,例如
IPAddress.NetworkToHostOrder((short)38175)