.net - .NET 中是否有任何基于消息的 TCP 套接字库?

标签 .net sockets tcp

虽然我是套接字编程的新手,但在编写一个简单的tcp服务器-客户端程序时,我发现基于流的api使用起来并不方便。

我的程序很简单:

  1. 客户端连接到服务器
  2. 服务器以不可预期的间隔不断地向客户端发送消息
  3. 客户端接收消息,根据消息中包含的数据进行处理

但是,使用基于流的 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
}

欢迎任何建议,谢谢。

最佳答案

另一个选择可能是 MSMQ,它是一个消息队列(而不是 TCP/IP 流),处理消息而不是字节流。 MSMQ 本身可以使用多种传输方式,包括 TCP/IP 或 WCF 等。

如果您只与 Windows 打交道(既然您提到了 .NET,那么这并不是一个不合理的限制),它适用于 Windows 2000 之后的所有版本。

有一些很好的示例代码向您展示了使用它的基本方法,以及一些更高级的东西。这很简单,发件人基本上可以构建一条消息并将其排队。听众收到完整的消息。

再简单不过了,如果您想在 Windows 上进行消息传递,这是快速进行的最简单方法之一。

关于.net - .NET 中是否有任何基于消息的 TCP 套接字库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402542/

相关文章:

c# - 底层连接已关闭: An unexpected error occurred on a send on

.net - ILMerge 忽略 bindingRedirect

c++ - Boost C++ 库生成奇怪的错误

c - 索拉里斯 8-10 : host2ip conversion problems

tcp - Erlang中socket的 "packet"选项怎么能把tcp传输加速这么多?

c# - DropDownList 不接受我尝试分配的 SelectedIndex

c# - 由于 Window.EfectiveValues 保留导致内存泄漏

sockets - 使用 boost::asio::read_some 在 TCP/IP 中丢弃数据?

php - 如何在 php 中处理 socket broken pipe [error 32]?

sockets - 游戏服务器的 tcp 或 udp?