首先我们需要设置服务器: 
项目文件中加入: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的服务器、客户端实例相关推荐

  1. QT 项目 实现基于TCP的文件服务器/客户端,支持上传和下载

    Demo:下载地址: https://download.csdn.net/download/guorong520/12408371 没有csdn积分的小伙伴可以留言你的QQ邮箱,我会发送Demo,相互 ...

  2. unix网络编程各种TCP客户-服务器程序设计实例(三)

    第五种  TCP预先派生子进程服务器程序: 对预先派生子进程服务器的最后一种改动就是由父进程调用accept,然后再将所接受的已连接描述字传递给子进程.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程 ...

  3. QT示例:基于TCP 点对多Socket通讯(server,clients)

    QT示例:基于TCP 点对多通讯(server,clients) 一.服务器server 二.客户端Client 下载:基于TCP 点对多Socket通讯 一.服务器server 因为对于客户端来说, ...

  4. Visual C#.Net网络程序开发-Tcp篇(1)

    Visual C#.Net 网络程序开发-Socket篇 Visual C#.Net网络程序开发-Tcp篇(1) Visual C#.Net网络程序开发-Tcp篇(2) Visual C#.Net网络 ...

  5. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  6. 四 基于TCP的服务器端/客户端

    ** 第四章 基于TCP的服务器端/客户端(1) ** 主要内容: 这里我们讨论通过套接字收发数据 1.TCP与UDP的区别数据传输方式不同 2.协议栈的层次关系:链路层->IP层->tc ...

  7. QT示例:基于TCP点对点Socket通讯

    QT示例:基于TCP点对点通讯 一. 概述 二.TCP 协议工作原理 三.TCP 编程模型 四.基于TCP点对点通讯示例 1.客户端 2.客户端Client示例 3.服务器 4.服务器server示例 ...

  8. Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程

    Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍         设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...

  9. QT学习:基于TCP的网络聊天室程序

    TCP与UDP的差别如图: 一.TCP工作原理 如下图所示,TCP能够为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错 地送达网络上的其他计算机.因此,对可靠性要求高的数据通信系统往往使用 ...

  10. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...

    # 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...

最新文章

  1. 差动机器人毕业设计_双轮差动机器人曲线算法设计与实现
  2. 智能安防 回家开门进入“看脸”时代
  3. Python中的ThreadLocal变量
  4. 为什么你的应用程序需要崩溃
  5. python程序启动其他python程序,如何使用Python启动应用程序的实例?
  6. kotlin键值对数组_Kotlin程序以升序对数组进行排序
  7. Vue 组件 mixins
  8. linux od命令详解,详细介绍Linux od命令
  9. 小米40W无线闪充今年商用:MIX 4首发?
  10. 勒索软件好多都使用恶意LNK链接文件欺骗用户 来看趋势科技分析新型LNK-PowerShell攻击...
  11. 实验:基于keepalived实现两台realserver服务器中的nginx和php-fpm服务互为主从
  12. 德芙背后刻骨铭心的痛
  13. [USACO19FEB]Cow Dating——找规律
  14. Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
  15. MacOS 迅速上手 Makefile 编译 C / C++ 工程
  16. LabVIEW_百度百科
  17. vscode 支持 X11 Forwarding
  18. 浅谈零知识证明之二:简短无交互证明(SNARK)
  19. 110配线架打法图解_「干货」图文并茂教会你110语音配线架线缆打法
  20. mybatis配置文件<mapper>飘红

热门文章

  1. python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器
  2. 在html中 标题字体标记的最大取值,西南大学网络教育2020年春0834]《网页设计》作业标准答案...
  3. php ping主机名,PHP PING值函数
  4. php redis 读写分离类,yii实现redis读写分离
  5. mongodb安装_Windows系统安装运行Mongodb服务
  6. 华硕笔记本装linux系统教程视频,在新买的华硕笔记本电脑安装linux手记
  7. python写ui自动化测试用例_自动化测试(6) | Web UI 自动化测试方案
  8. 哇,居然可以用这种烙铁头拆元器件!!!
  9. 西北农林科技大学 计算机复试,西北农林科技大学 | 学长学姐考研面试经验谈...
  10. java程序启动命令_如何用java启动windows命令行程序