当我是套接字编程的新手时,我在编写一个简单的tcp服务器-客户端程序时,发现基于流的api使用起来并不方便。
我的程序很简单:
但是,使用基于流的api,我必须:
while循环从流中读取数据这是很多工作,甚至比我程序的整个逻辑还要多,所以我想知道是否有一个库可以为我做上面的事情,有了这样的库,我可以像这样编程:
// Server
TcpListenerEx server = new TcpListenerEx();
TcpClientEx client = server.Accept();
client.SendMessage(new StringMessage("hello world"));
// Client
TcpClientEx client = new TcpClientEx();
client.Connect("localhost", 8989);
while (true) {
IMessage message = client.ReadMesage();
// Do work acording to message
}
Run Code Online (Sandbox Code Playgroud)
任何建议都将受到欢迎,谢谢。
在字节流中嵌入分隔符并不像看起来那么容易。您必须处理意外包含分隔符的消息。这会导致大量令人讨厌的检测和转义代码。
构建消息的一种非常简单的方法是在前面添加长度前缀。在发送方,您将消息序列化到缓冲区中,然后写入长度,然后写入缓冲区。接收方首先读取4个字节来获取长度。然后它读取正文。
这没有内置到 .NET 中,可能是因为每个二进制协议都略有不同。
所有这些都非常简单,您不太可能找到图书馆。这样的协议只需几十行即可编写。我的建议是自己做。
不过,如果您想构建消息结构,可以使用一个很棒的库:protobuf-net(适用于 .NET 的 Google 协议缓冲区)。它为您提供消息框架,并以非常合理的方式进行序列化。它很好地支持协议版本控制。
| 归档时间: |
|
| 查看次数: |
3629 次 |
| 最近记录: |