基于TCP的网络聊天程序
- 下图是最后效果图(因为是刚做好,还没来的及修改小细节,不过这都是小事);
- 在说明之前需要说明一点关于信号与槽的Qt常识
- signals: 只声明,不定义! 手动定义的信号,使用 emit ,由自己手动触发;
- slots:定义的槽可以通过自己定义的信号或者系统信号来被动调用;
好了,我们现在进入正题
1. 程序框架(数据传输的过程):
首先,我来说明下整个大框架。我认为,在本次编程过程中,最重要的部分就是他了,没有之一!
为了便于说明下面大家先看这张图,之后的说明都围绕这张图来说明:
- 客户端方面:首先,客户端方面包含两部分。一个是ClientUI,用于布置客户端界面;另一个是从QTcpSocket继承来的子类ClientSocket,通过 ClientSocket + ServerIP + Port 连接到服务器, 成功连接后就可以通过ClientSocket 和服务器端进行通信了(发送数据和接受数据)。ClientUI 和ClientSocket 之间通过信号与槽进行信息传递(接收:ClientSocket从服务器接收到数据后,通过信号与槽传递给ClientUI,然后ClientUI将信息显示出来;发送:点击Send按钮后,ClientUI将数据通过信号与槽传递给ClientSocket,ClientSocket将信息传输给服务器端)。
- 服务器端方面:服务器端方面稍复杂一点。一个用于布置服务器端界面的ServerUI;一个是从QTcpServer继承来的子类Server,Server 和ServerUI 之间传输数据与 ClientSocket 和 ClientUI 之间很类似,不再啰嗦,另外Server 还包含一个Socket的列表,用来记录连接到该服务器的socket信息。当有新信息收到后,可以通过该列表更新所有连接到该服务器端的客户端。在我看来,Server端就相当于一个信息中转站,任意一个客户端都可以通过Server与其他的客户端进行通信。
- 客户端的ClientSocket和服务器端Socket列表中某一socket连接,进行通信。
- 其实明白了以上内容就可以自己动手开始写了,下面信号与槽接口有需要可作为参考。