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

标签 .net sockets communication-protocol

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

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

任何解决方案的想法将不胜感激。另外,如果您有一个好的框架的链接,或者关于如何使用 .NET 中已经存在的组件的描述,我会非常高兴。

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

最佳答案

ZeroMQ看起来很适合您的问题。似乎您自己已经实现了类似的东西。

  • 充当并发框架的 Supersocket 库。
  • 通过 inproc、IPC、TCP 和多播传送消息。
  • 以扇出、发布订阅、管道和请求-回复模式连接 N 对 N。
  • 对于集群产品和 super 计算来说足够快。
  • 用于可扩展多核消息传递应用程序的异步 I/O。
  • 庞大而活跃的开源社区。
  • 20 多种语言,包括 C、C++、Java、.NET、Python。
  • 大多数操作系统,包括 Linux、Windows、OS X。
  • LGPL 免费软件,由 iMatix Corporation 提供商业支持。
  • 关于.NET 双向套接字实时通信协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661662/

    相关文章:

    c# - 为什么我的 OrderBy 使用这个比较器永远运行?

    c# - 如何确定 DateTime 中的值是否有效?

    c - InetPtonW 始终返回 1.0.0.0

    serial-port - 串行通信中的字节对齐

    sockets - 用不同语言编写的应用程序之间的通信

    C# 方法来缩放值?

    .net - 从 IClientMessageInspector 获取请求 URI

    C、TCP、recvAll block 未接收任何内容

    无法让套接字保持事件状态并接收数据

    Python套接字,如何摆脱无限循环并处理异常