【发布时间】:2015-02-16 08:24:33
【问题描述】:
我正在开发一个基于 C++ 中 WinSock 的服务器-客户端应用程序的项目。我已经完成了服务器和客户端之间通信所需的一切,我能够在它们之间发送和接收消息。
现在我需要知道如何完成客户端到客户端的消息传递部分以及必须如何完成工作。我只知道,比如客户端A和客户端B需要相互通信,客户端A必须将消息发送到服务器,服务器接收到消息并将其发送给客户端B。
如果这是正确的方法,请帮助我了解服务器应该如何知道接收者的任何信息(在这种情况下是客户端 B)?
如果我没有解释清楚我的问题,请告诉我。
感谢任何帮助。
【问题讨论】:
-
我这样做的方式是,每次客户端连接到服务器时,我都会给该客户端一个唯一的 ID。每当另一个客户端想要发送消息时,它都会发送 Receiver 的 UniqueID 和消息。服务器将该消息发送到带有该消息的目标 ID 的客户端。我有一个为客户端“轮询”服务器的功能。每次客户端连接到服务器时,我都会向每个客户端发送一个命令来更新他们的在线列表。当客户端断开连接时,它会向每个客户端发送一个命令来更新他们的列表。基本上就像 msn-messenger。
-
这是一个有趣的解决方案。但是,当您说“每当另一个客户端想要发送消息时,它都会发送接收者的 UniqueID 和消息。”,您的意思是它发送两条不同的消息,一条用于接收者的 UniqueID,一条用于消息,或者消息必须同时具有这两者信息以及消息的格式应该是什么?
-
我制作了自己的格式。它是这样的: struct CMsg {unsigned long ID, Length, Command; char* 消息;};我将结构写入字节数组并将其发送到服务器。服务器读取 ID (sizeof(unsigned long)),然后是长度,然后是命令。最后,它读取“长度”数量的字符(消息)。
-
@Brandon 谢谢。你的解释对我帮助很大。但我还有一个问题。我不确定我可以在这里问,或者我应该提出另一个问题。我需要知道如果我想在另一个平台(如android)中编写另一个客户端应用程序,客户端可以发送什么消息?我们如何从 java 访问 CMsg 结构?