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网络聊天室群聊的实现相关推荐

  1. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

    文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...

  2. C++搭建集群聊天室(十四):群聊功能

    文章目录 群聊功能思路 放码过来 groupuser.hpp group.hpp groupmodel.hpp groupmodel.cpp 群聊功能思路 1.创建群聊,提交群信息,返回群号 2.拉取 ...

  3. qt linux 文字转语音,QT文本转语音模块(TTS)QTextToSpeech

    QTextToSpeech是QT5.8以上的文本转语音模块. 使用方法: 在.pro工程文件中添加"QT += texttospeech". 添加头文件 #include 源文件: ...

  4. qt linux mac,MacOS下Qt Installer Framework使用教程【个人经验】

    MacOS下Qt Installer Framework怎么使用?使用Qt Installer Framework之前,必须先下载它, 下载地址: 下载完成之后自己进行安装,安装之后,我们就可以开始进 ...

  5. jom qt linux,【求助】Qt Creater编译问题——jom.exe退出

    [求助]Qt Creater编译问题--jom.exe退出 初学QT,碰到如下错误,不知如何解决...请各位大神们多多提点,多谢 为项目AuthorMars11-7-28执行构建步骤 ... 正在启动 ...

  6. qt linux 程序设置字体,QT程序中显示中文字体解决办法

    最近一直在做移植qtopia4.4.3和QT4.7的工作.qtopia已经可以在龙芯开发板上正常运行.搭建QT4.7的环境,使用QT4.7编写小程序,发现不能显示中文.研究了一番,找到了如下的解决方法 ...

  7. qt linux地图控件,Qt编写地图综合应用6-百度在线地图

    一.前言 百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点.矩形.圆形.行政区划等 ...

  8. qt linux phonon,如何使用 Qt Phonon(在网上找的,希望有人能用的着)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 videowidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto); videowi ...

  9. Linux Linux程序练习十二(select实现QQ群聊)

    //头文件--helper.h #ifndef _vzhang #define _vzhang#ifdef __cplusplus extern "C" { #endif#defi ...

  10. native聊天界面 react_ReactNative 聊天 App 实战|RN 仿微信界面群聊|朋友圈

    前言 这次要给大家分享的是基于ReactNative开发的聊天APP实战项目RN_ChatRomm,运用react-native+react-navigation+react-redux+react- ...

最新文章

  1. Python字典排序sorted无效,用匿名函数lambda解决
  2. STL链式存储结构——————list链表
  3. [转]XNA 3.1 转换到 XNA4.0 的备忘录
  4. C#中访问私有成员技巧
  5. Bzoj3924 [Zjoi2015]幻想乡战略游戏
  6. 56、servlet3.0-与SpringMVC整合分析
  7. ASP.NET Core MVC 之过滤器(Filter)
  8. 地图大数据来了!中国人口吸引力城市TOP 10
  9. weblogic安装错误BEA-090870解决方案
  10. Julia: 编译成EXE文件
  11. python数据标注工具_使用Python实现简易的数据标注工具
  12. 一个很难的sql面试题
  13. matlab最优化问题
  14. php curl jsonrpc,JsonRPC: Lightweight Json-RPC 2.0 client/server in PHP extension
  15. 中国食品甘油行业市场供需与战略研究报告
  16. 理解 Joomla 的几个概念 - 读《Aprees.Begging.Joomla.From.Novice.to.Professional》
  17. UnityAR-平面检测
  18. 关于桌面程序被安全软件误判为HEUR:Trojan.Win32.Generic的解决方案
  19. Win10通过注册表添加自启项
  20. office word由于宏安全,不能打开宏

热门文章

  1. 鸿蒙系统桌面天气如何设置,怎么设置桌面时间和天气预报?
  2. Oracle RMAN 备份与恢复
  3. 天勤数据结构完全二叉树选择题
  4. 【资源分享】Go语言并发之道 [美] 凯瑟琳(Katherine Cox-Buday)著 PDF 下载
  5. FineReport帆软报表的安装
  6. Excel批量打开URL
  7. Ansys Zemax / Ansys Speos | 如何使用Ansys光学解决方案设计和分析 HUD系统
  8. JVM---类加载与字节码技术
  9. python的统计库_Python-Scipy库-卡方分布统计量计算
  10. 单片机原理及应用 张鑫_单片机原理及应用