虽然我是套接字编程的新手,但在编写一个简单的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
}
欢迎任何建议,谢谢。
最佳答案
另一个选择可能是 MSMQ,它是一个消息队列(而不是 TCP/IP 流),处理消息而不是字节流。 MSMQ 本身可以使用多种传输方式,包括 TCP/IP 或 WCF 等。
如果您只与 Windows 打交道(既然您提到了 .NET,那么这并不是一个不合理的限制),它适用于 Windows 2000 之后的所有版本。
有一些很好的示例代码向您展示了使用它的基本方法,以及一些更高级的东西。这很简单,发件人基本上可以构建一条消息并将其排队。听众收到完整的消息。
再简单不过了,如果您想在 Windows 上进行消息传递,这是快速进行的最简单方法之一。
关于.net - .NET 中是否有任何基于消息的 TCP 套接字库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402542/