我目前在 C++ 中有一个基本的聊天程序,它使用 WinSock2.h 和 UDP。目前,用户能够向服务器发送消息,而服务器只是将相同的消息发回。我想知道我从这里去哪里(我不是要代码)。我想知道我应该如何继续将消息发送到另一个也连接到服务器的客户端。
如果我需要解释我已经做了什么,请告诉我。
非常感谢所有建议。
谢谢
我目前在 C++ 中有一个基本的聊天程序,它使用 WinSock2.h 和 UDP。目前,用户能够向服务器发送消息,而服务器只是将相同的消息发回。我想知道我从这里去哪里(我不是要代码)。我想知道我应该如何继续将消息发送到另一个也连接到服务器的客户端。
如果我需要解释我已经做了什么,请告诉我。
非常感谢所有建议。
谢谢
您将有一个当前连接的用户列表,当用户发送消息时,它会将其发布给所有连接的用户。
您的服务器将跟踪谁已连接,并删除那些断开连接的人。当有人连接或断开连接时,它会向所有当前连接的用户发送通知,告诉他们这个通知。
所有这些都不是特定于 UDP 的,事实上,对于这种类型的消息传递,TCP 可能会更好,因为您不必担心消息被丢弃。UDP 应该只用在性能最重要的地方,比如实时游戏、语音聊天。
当您说“已连接”(在客户端的上下文中)时-您到底是什么意思?因为你说你在你的程序中使用了 UDP。
在 UDP 协议中没有“连接”状态,除非你实现它。
然而,在 TCP 协议中,有(在协议本身内实现)。
此外,“广播”消息的基本思想很简单——保留已连接客户端的列表。
连接时添加客户端。断开连接时将其从列表中删除。
然后,当您想向所有人发送消息时,您只需遍历此列表即可。
同样,您必须先接收这些断开/连接事件,然后才能跟踪“已连接”客户端。
如果您使用 TCP 而不是 UDP,那么您就设置好了。
祝你好运。
基本上,就像 Matthew 说的,您需要存储与服务器的所有当前连接。当套接字连接时,您可以存储对该套接字的引用。现在,每当客户端发送消息时,您都可以将其重新广播到所有套接字。现在您还必须处理套接字断开连接的时间,因为您不想存储一堆关闭的套接字。