qt linux 网络聊天室,QT tcp网络聊天室群聊的实现
tcp编程通过分成 服务器 端与客户端
在QT里, tcp编程需用到两个类: QTcpServer, QTcpSocket
服务器端:
//1. 创建一个QTcpServer对象
QTcpServer *server = new QTcpServer;
//2. 调用对象的listen函数成员进行绑定地址与端口号, 并监听端口
server->listen(QHostAddress::Any, 9999); // 绑定端口号9999, 成功返回true, 失败返回false
// 3. 连接对象的newConnection信号到一个槽函数,用于处理客户端的连接。
connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); //当有客户端连接时,对象会发出newConnection信号,客户端的连接处理就在触发的槽函数new_client里处理了。
// 4. 在处理客户端连接的槽函数new_client里处理连接. 每个客户端连接上来后,在服务器端就会有一个QTcpSocket对象对一个客户端通信使用,如多个客户端连接上来,则会有多个QTcpSocket对象.
QTcpSocket *client;
client = server->nextPendingConnection(); //处理客户端连接, 调用此处理函数后,会得到一个QTcpSocket对象的地址,此对象专用于这个连接上来的客户端通信使用。
// QTcpSocket对象在服务器端用于与客户端通信使用,当客户端发数据到服务器端时,它会发出信号readyRead, 通知接收客户端的数据. 当客户端断开连接时,会发出disconnected信号,通知客户端已断线.发送数据则调用对象的write函数即可.
//连接信号,做相应的处理
connect(client, SIGNAL(readyRead()), this, SLOT(tcp_read())); // tcp_read槽函数用于接收客户端的数据, 在槽函数里调用QTcpSocket对象的read函数即可.
connect(client, SIGNAL(disconnected()), this, SLOT(lost_client())); // lost_client槽函数用于处理客户端断开连接
客户端:
// 1. 创建QTcpSocket对象
QTcpSocket *tcp = new QtcpSocket;
// 2. 连接服务器端的IP地址与端口号, 连接成功会发出connected信号。也可以直接调用waitForConnected等待连接的结果。
tcp->connectToHost("192.168.250.250", 9999);
// 3. 调用对象的read/write函数即可与服务器端进行收发数据了。当服务器端有发数据过来时,会发出readyRead信号,在连接此信号的槽函数里接收数据即可.
网络聊天室的技术要点:
因在服务器端每个客户端连接,都会产生一个QTcpSocket对象用于与对应的客户端通信。而客户端个数是不确定的,所以可以用 QList
的链表存放每个对象的地址。
群发的实现:
接收到客户端发过来的内容后,遍历链表,给每个客户端发送同一份内容即可。
qt linux 网络聊天室,QT tcp网络聊天室群聊的实现相关推荐
- 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...
- C++搭建集群聊天室(十四):群聊功能
文章目录 群聊功能思路 放码过来 groupuser.hpp group.hpp groupmodel.hpp groupmodel.cpp 群聊功能思路 1.创建群聊,提交群信息,返回群号 2.拉取 ...
- qt linux 文字转语音,QT文本转语音模块(TTS)QTextToSpeech
QTextToSpeech是QT5.8以上的文本转语音模块. 使用方法: 在.pro工程文件中添加"QT += texttospeech". 添加头文件 #include 源文件: ...
- qt linux mac,MacOS下Qt Installer Framework使用教程【个人经验】
MacOS下Qt Installer Framework怎么使用?使用Qt Installer Framework之前,必须先下载它, 下载地址: 下载完成之后自己进行安装,安装之后,我们就可以开始进 ...
- jom qt linux,【求助】Qt Creater编译问题——jom.exe退出
[求助]Qt Creater编译问题--jom.exe退出 初学QT,碰到如下错误,不知如何解决...请各位大神们多多提点,多谢 为项目AuthorMars11-7-28执行构建步骤 ... 正在启动 ...
- qt linux 程序设置字体,QT程序中显示中文字体解决办法
最近一直在做移植qtopia4.4.3和QT4.7的工作.qtopia已经可以在龙芯开发板上正常运行.搭建QT4.7的环境,使用QT4.7编写小程序,发现不能显示中文.研究了一番,找到了如下的解决方法 ...
- qt linux地图控件,Qt编写地图综合应用6-百度在线地图
一.前言 百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点.矩形.圆形.行政区划等 ...
- qt linux phonon,如何使用 Qt Phonon(在网上找的,希望有人能用的着)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 videowidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto); videowi ...
- Linux Linux程序练习十二(select实现QQ群聊)
//头文件--helper.h #ifndef _vzhang #define _vzhang#ifdef __cplusplus extern "C" { #endif#defi ...
- native聊天界面 react_ReactNative 聊天 App 实战|RN 仿微信界面群聊|朋友圈
前言 这次要给大家分享的是基于ReactNative开发的聊天APP实战项目RN_ChatRomm,运用react-native+react-navigation+react-redux+react- ...
最新文章
- Python字典排序sorted无效,用匿名函数lambda解决
- STL链式存储结构——————list链表
- [转]XNA 3.1 转换到 XNA4.0 的备忘录
- C#中访问私有成员技巧
- Bzoj3924 [Zjoi2015]幻想乡战略游戏
- 56、servlet3.0-与SpringMVC整合分析
- ASP.NET Core MVC 之过滤器(Filter)
- 地图大数据来了!中国人口吸引力城市TOP 10
- weblogic安装错误BEA-090870解决方案
- Julia: 编译成EXE文件
- python数据标注工具_使用Python实现简易的数据标注工具
- 一个很难的sql面试题
- matlab最优化问题
- php curl jsonrpc,JsonRPC: Lightweight Json-RPC 2.0 client/server in PHP extension
- 中国食品甘油行业市场供需与战略研究报告
- 理解 Joomla 的几个概念 - 读《Aprees.Begging.Joomla.From.Novice.to.Professional》
- UnityAR-平面检测
- 关于桌面程序被安全软件误判为HEUR:Trojan.Win32.Generic的解决方案
- Win10通过注册表添加自启项
- office word由于宏安全,不能打开宏
热门文章
- 鸿蒙系统桌面天气如何设置,怎么设置桌面时间和天气预报?
- Oracle RMAN 备份与恢复
- 天勤数据结构完全二叉树选择题
- 【资源分享】Go语言并发之道 [美] 凯瑟琳(Katherine Cox-Buday)著 PDF 下载
- FineReport帆软报表的安装
- Excel批量打开URL
- Ansys Zemax / Ansys Speos | 如何使用Ansys光学解决方案设计和分析 HUD系统
- JVM---类加载与字节码技术
- python的统计库_Python-Scipy库-卡方分布统计量计算
- 单片机原理及应用 张鑫_单片机原理及应用