C# 网络编码

C# 网络编码,c#,networking,C#,Networking,我正在用C#开发一个网络应用程序,通过网络发送大量普通数字。我发现了非常有用的IPAddress.HostToNetworkOrder和IPAddress.NetworkToHostOrder方法,但它们给我留下了几个问题: 我知道我需要对整数进行编码和解码,那么无符号整数呢?我想是的,所以目前我正在通过将指向无符号整数的指针转换为指向整数的指针,然后对整数进行网络转换(因为不存在接受无符号整数的方法重载) 二,浮点数(单精度和双精度)。我认为没有,但是如果我真的需要,我应该做一个类似于无符号整

我正在用C#开发一个网络应用程序,通过网络发送大量普通数字。我发现了非常有用的IPAddress.HostToNetworkOrder和IPAddress.NetworkToHostOrder方法,但它们给我留下了几个问题:

  • 我知道我需要对整数进行编码和解码,那么无符号整数呢?我想是的,所以目前我正在通过将指向无符号整数的指针转换为指向整数的指针,然后对整数进行网络转换(因为不存在接受无符号整数的方法重载)

    二,浮点数(单精度和双精度)。我认为没有,但是如果我真的需要,我应该做一个类似于无符号整数的方法,把一个指针转换成一个整数指针,然后像这样转换吗


  • 编辑::Jon的答案没有回答问题的后半部分(它也没有真正回答第一部分!),如果有人回答第2部分,我将不胜感激。我想你会发现在中使用我的
    EndianBinaryReader
    EndianBinaryWriter
    更容易些,然后你可以自己决定endianness。或者,对于单个值,您可以使用
    EndianBitConverter

    您最好阅读几个RFC文档,了解不同的TCP/IP协议(应用程序级别,例如HTTP/FTP/SNMP等)是如何实现的

    这通常是一个特定于协议的问题(两个问题),因为数据包必须以协议定义的格式封装整数或浮点数

    对于SNMP,这是一种转换,将整数/浮点数更改为几个字节,然后再更改回来。使用ASN.1


    你要这样做吗?你没有wcf吗?这个系统允许任何网络实现(它是一个依赖外部网络的库),所以我不得不假设外部系统不会为我做任何网络编码。好吧,我来看看它是如何工作的,并可能编写我自己的实现。不过,最初的问题仍然存在,我需要编码单字节和单字节吗?马丁,字节顺序与符号无关,所以是的。我猜单字节和单字节需要编码,我想你也在暗示单字节/双字节需要编码?我几乎从不使用fp,所以我无法直接知道。然而,fp值很可能是在一个独立于字节顺序的标准布局中,所以可能不是。是的,这就是问题所在,我不知道,也找不到关于它的任何合适的信息:/这是针对udp系统的,所以协议基本上是自定义的。基本上,我使用一些任意的网络系统向另一端发送一个字节数组。然后我必须解码这些字节。问题主要是endianness效应是否以影响整数的方式浮动
    public static UInt64 HostToNetworkOrder(UInt64 i)
    {
        Int64 a = *((Int64*)&i);
        a = IPAddress.HostToNetworkOrder(a);
        return *((UInt64*)&a);
    }
    
    public static UInt64 NetworkToHostOrder(UInt64 a)
    {
        Int64 i = *((Int64*)&a);
        i = IPAddress.HostToNetworkOrder(i);
        return *((UInt64*)&i);
    }