在TCP流中发送消息

时间:2012-03-29 16:43:06

标签: c networking tcp udp

TCP是基于流的,这意味着您发送字节而不必将它们放在"消息中,因此接收方可能会收到一半消息或三分之二的消息。

因此,在每个消息都是固定大小的游戏中,如果我收到一部分消息,我可以将其保留在缓冲区中,直到我收到另一部分。这有点单调乏味,但还有其他基于消息的可靠协议吗?可能有,但是在操作系统中没有像TCP和UDP那样实现,所以我必须使用一些库,只要它易于使用就很好。

我总能制作一个有点可靠的UDP协议。你有什么建议?

5 个答案:

答案 0 :(得分:2)

您可以通过UDP实现自己的基于ACK的协议。在发送端前面添加带有消息/序列号的消息,并将该号码回送给接收方的发送方。在发送端为每条消息启动一个计时器,并在收到相应的ACK时取消它。如果计时器弹出,请重新发送消息。

XMPP对于这个应用来说太重了。

答案 1 :(得分:1)

如果您正在寻找传输层协议,请检查SCTP。 SCTP是面向消息的,类似于UDP,并确保可靠,按顺序传输具有TCP等拥塞控制的消息。

SCTP尚未广泛使用。所以我建议使用TCP进行某种消息框架。

答案 2 :(得分:1)

您可以使用ØMQ(ZeroMQ)作为您的消息传递基础架构。 ZeroMQ在TCP和其他传输机制之上提供可靠的消息传递。它有一个C API和一个全面的guide

请注意,您必须为所有同行使用外部库,但您说对您没问题。

答案 3 :(得分:0)

您可以查看XMPP。它是基于TCP / IP的协议,基于XML消息。

答案 4 :(得分:0)

协议缓冲区,对XMPP的了解较少,但在您的情况下可能会引起一些兴趣。

http://code.google.com/intl/en-US/apis/protocolbuffers/docs/overview.html