.NET双向套接字实时通信协议

时间:2010-09-07 18:48:17

标签: .net sockets communication-protocol

我需要维护服务器和多个客户端之间的连接,以便客户端可以发送命令,服务器可以触发事件。服务器基本上是一个音乐播放器,客户端发送“Play()”,“Pause()”,“GetPlaylists()”等命令。它旁边的服务器需要能够告诉客户这样的事情“SongEnded”或“PlayerPaused”。而且,它需要能够来回发送一些数据(如当前歌曲,专辑图像,播放列表等)。我可以继续自己创建一个套接字并创建自己的协议来处理所有上述场景,但很可能有人已经在我之前完成了这个,所以我真正想要的是一个实时的框架 - .NET的服务器和客户端之间的通信。我看过xml-rpc,但不知道我应该如何处理“OnClientSend”。另外,如果我没弄错的话,xml-rpc会变成类似REST的。我也看了wcf,但由于我没有使用它的经验,我不知道从哪里开始,以及如何在一个简单的控制台应用程序中托管服务器。

重要:客户端需要能够不是.NET 重要:这需要可以连接到java(android) 重要:主要平台是Windows(服务器和客户端)和Android(客户端) 重要提示:不会播放音频流。但是,需要发送图像。

任何解决方案的想法都将受到赞赏。此外,如果您获得了一个良好框架的链接,或者如何使用.NET中已存在的组件的描述,我会非常高兴。

[编辑] 问题是,通过套接字发送数据时,无法保证(根本不会!)您发送的软件包将同时被服务器读取。我可能再次发送50,然后是100,然后再发送50个字节,但是服务器可能会将其读取为200字节块,或者先读取100个然后是100等,这意味着我需要创建一个缓冲区,读取消息直到我确定知道(这是问题)我收到了一条完整的信息(仅此而已)。

4 个答案:

答案 0 :(得分:2)

ZeroMQ看起来非常适合您的问题。似乎你自己实现了类似的东西。

  • 充当并发框架的Supersocket库。

  • 跨越inproc,IPC,TCP和多播传递消息。

  • 在扇出,pubsub,管道和请求 - 回复模式中连接N到N.

  • 群集产品和超级计算的速度足够快。

  • 可扩展多核消息传递应用程序的异步I / O.

  • 庞大而活跃的开源社区。

  • 20多种语言,包括C,C ++,Java,.NET,Python。

  • 大多数操作系统包括Linux,Windows,OS X。

  • LGPL免费软件,iMatix公司的商业支持。

答案 1 :(得分:1)

答案 2 :(得分:0)

您还可以查看XMPPWebSockets。 XMPP不仅限于发送消息,您可以随时扩展它以用于您自己的目的。 WebSockets很好,因为它是HTML5的一部分。

答案 3 :(得分:0)

我最终创建了自己的简单协议,我可以轻松地以多种语言实现。我通过在套接字的两侧添加额外的缓冲层来实现所需的结果,然后发送每个消息,后跟一个字节序列,告诉另一方这是消息的结束。我还在消息中添加了id以启用特殊的“$ Return”消息。

消息是使用xmlserializer的序列化类。类是从xsd生成的。