B站视频讲解基于UDP协议的群聊功能实现https://www.bilibili.com/video/BV1zNvkeAEZy?p=17
GitHub源码https://github.com/KeepTryingTo/QT_Learning/tree/main/QtUDPSocket/QtGroupChat
本文主要是基于UDP协议来实现的群聊功能,主要是利用了UDP协议的广播机制,因此读者在阅读本文之前,建议读者首先去了解一下前面几篇博文关于UDP协议的知识点,本文是基于前面几篇博文来实现的。
1.实现的思路如下:假设这里有5个主机,每个主机打开一个客户端界面,然后进行群聊,每个主机都可以看到当前哪些主机在线以及上线时间。
- 由于我们这里实际只有一台主机,要模拟多台主机的话,在UDP协议中绑定IP和端口的过程,采用QT中提供的共享地址和端口的机制:QAbstractSocket::ShareAddress | QAbstractSocket::ReuseAddressHint。也就是打开多个程序运行界面,就可以使用相同的地址以及IP绑定。
- 由于是群聊,发送的消息是大家(包括自己)都能看到,因此,采用广播机制,在发送过程所指定的IP和端口所有都是一样的。
- 由于每个客户端用户都可以看到当前所有在线用户以及上线时间,因此在打开程序(客户端上线)都需要向所有其他在线用户发送一个上线用户socketID(套接字ID)以及时间,关于具体的实现请看代码。
Qt中基于UDP协议的群聊功能