Qt网络程序:基于TCP的服务器、客户端实例
首先我们需要设置服务器:
项目文件中加入:QT += network
相关头文件:
#include<QTcpServer>//监听套接字
#include<QTcpSocket>//建立连接的通信套接字
1
2
在头文件中,定义套接字:
QTcpServer *tcpServer;//监听套接字
QTcpSocket *tcpSocket;//通信套接字
1
2
随后,在cpp文件中初始化:
//初始化套接字
tcpServer = NULL;
tcpSocket = NULL;
//监听套接字,指定父对象自动回收空间
tcpServer = new QTcpServer(this);
//设定端口
tcpServer->listen(QHostAddress::Any,8888);
1
2
3
4
5
6
7
当新连接建立时,监听套接字会自动触发信号:newConnection ,读取到数据之后,通信套接字会触发信号readyRead,因此,我们可以通过信号槽机制进行操作,这里嵌套了两个Qt5的Lambda表达式:
//新连接建立的信号槽
connect(tcpServer,&QTcpServer::newConnection,[=]()
{
//取出建立好连接的套接字
tcpSocket = tcpServer->nextPendingConnection();
//获取对方的IP和端口
QString ip = tcpSocket->peerAddress().toString();
qint16 port = tcpSocket->peerPort();
//将信息显示到UI
QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);
ui->textEditRead->setText(temp);
//连接建立后,读取到数据的信号槽
connect(tcpSocket,&QTcpSocket::readyRead,
[=]()
{
//从通信套接字取出内容
QByteArray array = tcpSocket->readAll();
//显示到UI
ui->textEditRead->append(array);
} );
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
客户端的设置与服务器类似,只不过少了一个监听套接字:
头文件中定义套接字:QTcpSocket * tcpSocket;//通信套接字
cpp文件初始化套接字:
//初始化套接字
tcpSocket = NULL;
//分配空间,指定父对象
tcpSocket = new QTcpSocket(this);
1
2
3
4
信号槽与服务器类似,这里的Lambda表达式没有嵌套:
//获取服务器IP和端口
QString ip = ui->lineEditIP->text();
qint16 port = ui->lineEditPort->text().toInt();
//主动连接服务器
tcpSocket->connectToHost(QHostAddress(ip),port);
//建立连接的信号槽
connect(tcpSocket,&QTcpSocket::connected,
[=]()
{
ui->textEditRead->setText("恭喜,成功连接服务器!");
}
);
//连接建立后收到服务器数据的信号槽
connect(tcpSocket,&QTcpSocket::readyRead,
[=]()
{
//获取对方发送的内容
QByteArray array = tcpSocket->readAll();
//显示到编辑框
ui->textEditRead->append(array);//append,添加内容
}
//发送数据
//获取编辑框内容
QString str = ui->textEditWrite->toPlainText();
//发送数据
tcpSocket->write( str.toUtf8().data() );
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
关于断开连接:
1、disconnectFromHost()
尝试关闭套接字。如果有等待写入的挂起数据,qabstracksocket将进入关闭状态,并等待所有数据写入完毕。最终,它将进入未连接状态并发出disconnected()信号。
2、abort()
中止当前连接并重置套接字。与disconnectFromHost ( )不同,此函数会立即关闭套接字,丢弃写入缓冲区中的所有挂起数据。
3、close()
关闭套接字的I / O设备,断开套接字与主机的连接,关闭套接字,并重置名称、地址、端口号和基础套接字描述符。
效果如图,连接建立后服务器与客户端相互发送数据:
Demo下载地址:
链接:https://pan.baidu.com/s/12pGsDS-NlKke7a5SlpBqLQ 密码:eesc
如果阅读本篇博客有障碍,可参考网络编程基础知识:
可以参考https://blog.csdn.net/qq_40194498/article/details/78901089
https://blog.csdn.net/qq_40194498/article/details/78934426
原文:https://blog.csdn.net/qq_40194498/article/details/79710824
Qt网络程序:基于TCP的服务器、客户端实例相关推荐
- QT 项目 实现基于TCP的文件服务器/客户端,支持上传和下载
Demo:下载地址: https://download.csdn.net/download/guorong520/12408371 没有csdn积分的小伙伴可以留言你的QQ邮箱,我会发送Demo,相互 ...
- unix网络编程各种TCP客户-服务器程序设计实例(三)
第五种 TCP预先派生子进程服务器程序: 对预先派生子进程服务器的最后一种改动就是由父进程调用accept,然后再将所接受的已连接描述字传递给子进程.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程 ...
- QT示例:基于TCP 点对多Socket通讯(server,clients)
QT示例:基于TCP 点对多通讯(server,clients) 一.服务器server 二.客户端Client 下载:基于TCP 点对多Socket通讯 一.服务器server 因为对于客户端来说, ...
- Visual C#.Net网络程序开发-Tcp篇(1)
Visual C#.Net 网络程序开发-Socket篇 Visual C#.Net网络程序开发-Tcp篇(1) Visual C#.Net网络程序开发-Tcp篇(2) Visual C#.Net网络 ...
- 网络编程——基于TCP协议的通讯录【课程设计】
网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...
- 四 基于TCP的服务器端/客户端
** 第四章 基于TCP的服务器端/客户端(1) ** 主要内容: 这里我们讨论通过套接字收发数据 1.TCP与UDP的区别数据传输方式不同 2.协议栈的层次关系:链路层->IP层->tc ...
- QT示例:基于TCP点对点Socket通讯
QT示例:基于TCP点对点通讯 一. 概述 二.TCP 协议工作原理 三.TCP 编程模型 四.基于TCP点对点通讯示例 1.客户端 2.客户端Client示例 3.服务器 4.服务器server示例 ...
- Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程
Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍 设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...
- QT学习:基于TCP的网络聊天室程序
TCP与UDP的差别如图: 一.TCP工作原理 如下图所示,TCP能够为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错 地送达网络上的其他计算机.因此,对可靠性要求高的数据通信系统往往使用 ...
- 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...
# 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...
最新文章
- 差动机器人毕业设计_双轮差动机器人曲线算法设计与实现
- 智能安防 回家开门进入“看脸”时代
- Python中的ThreadLocal变量
- 为什么你的应用程序需要崩溃
- python程序启动其他python程序,如何使用Python启动应用程序的实例?
- kotlin键值对数组_Kotlin程序以升序对数组进行排序
- Vue 组件 mixins
- linux od命令详解,详细介绍Linux od命令
- 小米40W无线闪充今年商用:MIX 4首发?
- 勒索软件好多都使用恶意LNK链接文件欺骗用户 来看趋势科技分析新型LNK-PowerShell攻击...
- 实验:基于keepalived实现两台realserver服务器中的nginx和php-fpm服务互为主从
- 德芙背后刻骨铭心的痛
- [USACO19FEB]Cow Dating——找规律
- Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
- MacOS 迅速上手 Makefile 编译 C / C++ 工程
- LabVIEW_百度百科
- vscode 支持 X11 Forwarding
- 浅谈零知识证明之二:简短无交互证明(SNARK)
- 110配线架打法图解_「干货」图文并茂教会你110语音配线架线缆打法
- mybatis配置文件<mapper>飘红
热门文章
- python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器
- 在html中 标题字体标记的最大取值,西南大学网络教育2020年春0834]《网页设计》作业标准答案...
- php ping主机名,PHP PING值函数
- php redis 读写分离类,yii实现redis读写分离
- mongodb安装_Windows系统安装运行Mongodb服务
- 华硕笔记本装linux系统教程视频,在新买的华硕笔记本电脑安装linux手记
- python写ui自动化测试用例_自动化测试(6) | Web UI 自动化测试方案
- 哇,居然可以用这种烙铁头拆元器件!!!
- 西北农林科技大学 计算机复试,西北农林科技大学 | 学长学姐考研面试经验谈...
- java程序启动命令_如何用java启动windows命令行程序