Qt NetWork即时通讯网络聊天室(基于TCP)
本文使用QT的网络模块来创建一个网络聊天室程序,主要包括以下功能:
1、基于TCP的可靠连接(QTcpServer、QTcpSocket)
2、一个服务器,多个客户端

3、服务器接收到某个客户端的请求以及发送信息,经该信息重定向发给其它客户端
最终实现一个共享聊天内容的聊天室!
开发测试环境:QT5.12.0 + Qt Creator 4.8.0 + MinGW7.3
代码如下:
1、服务器 QtInstantMessagingServer
基于Console的应用程序,因为这里不需要界面。
QT += core network
QT -= gui
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#ifndef SERVER_H
#define SERVER_H #include <QObject> class Server : public QObject void startServer(); signals: public slots: private: #endif // SERVER_H |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
#include "Server.h"
Server::Server(QObject *parent) : QObject(parent) } void Server::startServer() } void Server::sendMessageToClients(QString message) } void Server::newClientConnection() // When a client is disconnected from the server, the disconnected() signal will be triggered // whenever a client is sending in a message to the server, the readyRead() signal will be triggered. // This function gets triggered whenever a client's network state has changed, |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 |
#include <QCoreApplication>
#include "Server.h" int main(int argc, char *argv[]) Server* myServer = new Server(); return a.exec(); |
2、客户端QtInstantMessagingClient
基于Widget的应用程序,客户端需要一个友好的界面,父类QMainWindow,MainWindow.ui定义界面如下:

可以给不同的客户端取个名字,如“Michael”、“James”等等,点击“Connect”按钮连接服务端,此时Label变为“Disconnect”。
QT += core gui network
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow : public QMainWindow public: private slots: void on_sendButton_clicked(); private: void printMessage(QString message); #endif // MAINWINDOW_H |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#include "MainWindow.h"
#include "ui_MainWindow.h" MainWindow::MainWindow(QWidget *parent) : MainWindow::~MainWindow() void MainWindow::on_connectButton_clicked() } void MainWindow::socketConnected() void MainWindow::socketDisconnected() void MainWindow::socketReadyRead() void MainWindow::printMessage(QString message) void MainWindow::on_sendButton_clicked() |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 |
#include "MainWindow.h"
#include <QApplication> int main(int argc, char *argv[]) return a.exec(); |
构建成功后,将生成的QtInstantMessagingServer.exe以及QtInstantMessagingClient.exe置于.\Qt\Qt5.12.0\5.12.0\mingw73_64\bin目录下(该目录下可以双击exe直接运行!)


Qt NetWork即时通讯网络聊天室(基于TCP)的更多相关文章
- php网易云信im即时通讯和聊天室
话不多说 直接上代码 <?php/** * Created by PhpStorm. * User: lhl * Date: 2019/4/10 * Time: 17:38 */ namespa ...
- 简单即时通讯、聊天室--java NIO版本
实现的功能: 运行一个服务端,运行多个客户端.在客户端1,发送消息,其余客户端都能收到客户端1发送的消息. 重点: 1.ByteBuffer在使用时,注意flip()方法的调用,否则读取不到消息. 服 ...
- 基于Linux的TCP网络聊天室
1.实验项目名称:基于Linux的TCP网络聊天室 2.实验目的:通过TCP完成多用户群聊和私聊功能. 3.实验过程: 通过socket建立用户连接并传送用户输入的信息,分别来写客户端和服务器端,利用 ...
- php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)
php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...
- Python3 网络通信 网络聊天室 文件传输
Python3 网络通信 网络聊天室 文件传输 功能描述 该项目将实现一个文字和文件传输的客户端和服务器程序通信应用程序.它将传输和接收视频文件. 文本消息必须通过TCP与服务器通信,而客户端自己用U ...
- python模拟QQ聊天室(tcp加多线程)
python模拟QQ聊天室(tcp加多线程) 服务器代码: from socket import * from threading import * s = socket(AF_INET,SOCK_S ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- Qt实现网络聊天室(客户端,服务端)
1. 效果演示 客户端 服务器 连接成功之后 2. 预备知识 如果不知道网络编程的可以去看我的上一篇文章C++网络编程 在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们 ...
随机推荐
- 安装服务器pve虚拟系统(可以通过web管理物理机集群资源与虚拟机)
做此系统前,可以先进入bios,设置一下ipmi的网络地址.可以远程管理服务器 输入服务器的ipmi里面配置的ip 默认账号与密码admin 点击launch 会自动下载认证文件 下载好java软件环 ...
- Intellij Idea 星云常用配置工具箱
1. 软件配置篇 1.1 关闭默认打开最近的工程选项 1.2. 修改快捷键 1.3 修改字体 1.4 创建类模板 效果如下: 1.5 创建接口模板 效果同上 2. 插件篇 1.1 省略Getter a ...
- 动态规划大合集II
1.前言 大合集总共14道题,出自江哥之手(这就没什么好戏了),做得让人花枝乱颤.虽说大部分是NOIP难度,也有简单的几道题目,但是还是做的很辛苦,有几道题几乎没思路,下面一道道边看边分析一下. 2. ...
- 《Google软件测试之道》告诉你什么是测试
第一章:Google软件测试介绍 1.Google的测试团队并非雄兵百万,我们更像是小而精的特种部队,我们依靠的是出色的战术和高级武器 2.在Google,写代码的开发人员也承担了测试的重任.质量从来 ...
- 【线段树】【P5522】[yLOI2019] 棠梨煎雪
C [yLOI2019] 棠梨煎雪 Background 岁岁花藻檐下共将棠梨煎雪 自总角至你我某日辗转天边 天淡天青 宿雨沾襟 一年一会信笺却只见寥寥数言 --银临<棠梨煎雪> Desc ...
- Spring事务注解@Transactional失效的问题
在项目中发现事务失效,使用@Transactional注解标注的Service业务层实现类方法全部不能回滚事务了,最终发现使用因为Spring与shiro进行整合之后导致的问题,将所有的Service ...
- Jmeter实现压力测试(多并发测试)
一.http://jmeter.apache.org/ 二.点击Download Releases选择版本下载 三.下载解压: 将解压后的文档存盘-下载logkit-2.0.jar(汉化包)放到jme ...
- 第01组 Alpha冲刺(4/6)
队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11884375.html 作业博客: https://edu.cnblogs.com/campus/fz ...
- javascript系列--认识并理解构造函数,原型和原型链
一.前言 介绍构造函数,原型,原型链.比如说经常会被问道:symbol是不是构造函数:constructor属性是否只读:prototype.[[Prototype]]和__proto__的区别:什么 ...
- 用简单的JS代码制作计算器
代码+注释一共不到200行,是练习交流的必备良药 主界面如下: 操作示意图: 以下是代码部分 HTML: <div> <table class="window"& ...