最佳实践:为C#中的已知协议生成和解析网络数据包?

时间:2009-08-25 17:49:29

标签: c# networking protocols network-protocols

我最近尝试过问similar question,但经过多次回答,我发现这不是正确的问题。

是否存在基于现有协议(如SMPP(短消息点对点协议[用于SMS消息])或各种聊天协议(如HOTLINE或IRC)生成和解析网络数据包的指南或普遍接受的做法C#。

其中一个答案提到了Google Protocol Buffers.NET version。看了之后我意识到如果你能控制两端(客户端和服务器),序列化非常有用。我将遵循协议规范。

生成 在过去,我创建了一个类或结构,其属性是网络数据包/协议的一部分:

// PSEUDO CODE
class NetworkObject 
{
    private int length;
    private string data;

    // ...

    public byte[] GetBytes() 
    {
        // Convert string and int to byte array
        return byte array;
    }
}

该类有一个byte[] GetBytes()方法,一旦我设置了适当的属性,我就会调用它。我拿这个字节数组并通过网络发送它。在我之前的问题中,其中一个答案建议将数据存储在内存流或字节流中,这似乎是一个更好的主意。

似乎我的字节数组方法可能比将网络流传递给根据类属性直接将数据包数据直接写入流的方法慢。除非我在这里遗漏了一些非常重要的东西,否则我可能会做的事情。

解析 在解析时,我使用各种case语句来逐步执行各种PDU,并生成一个NetworkObject,其中填充了适当的属性,并按照我认为合适的方式执行。

1 个答案:

答案 0 :(得分:1)

为什么不尝试对象的序列化?