qt 网络

介绍 待补
QT网络编程——TCP服务器和客户端通信

Qt网络编程(1):QTcpSocket和QTcpServer的基本使用
介绍得非常清楚

客户端

有两种方式:

  1. 继承QObject,QTcpSocket当作成员函数
  2. 继承QTcpSocket

先说第一种

QTcpSocket 成员变量

首先 QTcpSocket 最基本的功能
1、创建QTcpSocket对象,并用connectToHost()函数通过IP和端口号连接服务器。

tcpSocket = new QTcpSocket(this);
tcpSocket->connectToHost(ip,port);   //根据IP地址和端口号连接服务器

2、客户端成功连接上服务器,系统会产生connected信号。(所以需要将信号和槽函数进行绑定)

connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_slot()));   //客户端连接服务器成功后会产生connected信号

3、客户端收到服务器发送来的数据,会产生readyRead信号,在connected信号对应的槽函数中,将readyRead信号和对应的槽函数进行绑定。

connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_slot()));     //和服务器连接成功后,就需要就收服务器发送过来的数据了,

4、通过套接字对象读取服务器发来的数据。(用readall()等函数)

tcpSocket->readAll();      //从套接字中读取服务器发来的数据

5、通过套接字向服务器发送数据。(用write()函数)

tcpSocket->write(text);       //向服务器发送数据

6、服务器断开连接,会发送disconnected信号

  connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnected()));

这里要做的稍微复杂一点
头文件

class Client : public QObject
{Q_OBJECTpublic:Client();~Client ();void Connect(QString strServerIP, int nServerPort);//连接服务器void ReConnect();//重新连接服务器void Disconnect();
private:QMutex          m_lock;QTcpSocket*      m_pTcpSocket;QTimer         m_timerConnect;QTimer           m_timerReconnect;QString  m_strServerIP ;QQueue<QString> m_QueueMess;//要发送的信息int  m_nServerPort;
}

连接服务器

要保持一直连接的状态
要考虑到:连不上自动重连;掉线自动重连的功能
这里用定时器实现以上功能

QTimer           m_timerConnect;

连接服务器 Connect时开一个定时器 m_timerConnect。

  1. 如果连上了,就关闭定时器
  2. 如果到时间 ,就尝试重新连接

在构造函数里:

  • 定时器槽函数
  • QTcpSocket 连接上的槽函数
  • QTcpSocket 断开的槽函数
 m_timerConnect.setInterval(1000);connect(&m_timerConnect, SIGNAL(timeout()), this, SLOT(OnTimerReconncet()));m_pTcpSocket = new QTcpSocket(this);connect(m_pTcpSocket, SIGNAL(connected()), this, SLOT(OnConnected()));connect(m_pTcpSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnected()));

连服务器:

先关闭套接字
abort 调用了 close, close 调用了 disconnectFromHost。 abort 立即关闭套接字,并丢弃写缓冲区中的所有待处理数据。close 关闭套接字的 IO,以及套接字的连接。

再连接服务器connectToHost(m_strServerIP, m_nServerPort, QTcpSocket::ReadWrite);

开启定时器

void Client::Connect(QString strServerIP, int nServerPort)
{m_strServerIP = strServerIP;m_nServerPort = nServerPort;m_bCloseConnect = false;// m_pTcpSocket->abort();m_pTcpSocket->connectToHost(m_strServerIP, m_nServerPort, QTcpSocket::ReadWrite);m_timerConnect.start(3000);
}
如果服务器连上了

关闭定时器,状态设置为已连接

//connect(m_pTcpSocket, SIGNAL(connected()), this, SLOT(OnConnected()));
void Client::OnConnected()
{m_bConnected = true;m_timerConnect.stop();
}
如果没连上
//到时间没有连上,触发定时器connect(&m_timerConnect, SIGNAL(timeout()), this, SLOT(OnTimerReconncet()));
void Client::OnTimerReconncet()
{m_pTcpSocket->abort();m_pTcpSocket->connectToHost(m_strServerIP, m_nServerPort, QTcpSocket::ReadWrite);
}
如果服务器断开了

开启定时器

void CTcpClient::OnDisconnected()
{m_bConnected = false;m_timerReconnect.start();
}

发送的数据

向服务器发送消息调用

 qint64 write(const char *data, qint64 len);qint64 write(const char *data);
  1. 直接发送数据:
    bool SendData(QString strData);
    {
    AddDataToSendQueue(strData);
    }

AddDataToSendQueue
m_lock.lock();
m_quueSendData.enqueue(strData);
m_lock.unlock();

emit sendData();
  1. 阻塞式发送

发送一个数据,开启时间循环。等待服务器返回消息。再返回结果

接收数据

qt TCP 网络编程相关推荐

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

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

  2. TCP网络编程的基本流程

    TCP网络编程的基本流程 对于服务端,通常为以下流程: 调用socket函数创建socket 调用bind函数将socket绑定到某个IP和端口上 调用listen开始监听 当有客户端请求连接上来时, ...

  3. 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一.TCP Socket API 1. socket 2. bind 3. listen 4. accept 5. connect 二.封装TCPSocket 三.服务端的实现 1. ...

  4. muduo学习笔记:net部分之实现TCP网络编程库-Buffer

    文章目录 为什么采用non-blocking网络编程中应用层buffer是必需的? Buffer 设计 Buffer::readFd() 线程安全 Muduo Buffer 的数据结构 Muduo B ...

  5. TCP网络编程 [Java]

    TCP网络编程 这里我们通过一个例子来了解什么是TCP网络编程: eg: 问题: -> 从客户端发送文件到服务端,服务端将接受到的客户端发来的文件存储到本地之后并返回一个发送成功给客户端,并关闭 ...

  6. 套接字编程-TCP网络编程

    文章目录 套接字地址结构 通用套接字地址数据结构 以太网协议的套接字地址数据结构 Netlink协议套接字地址结构 TCP网络编程 套接字初始化socket() domain type protoco ...

  7. 粤嵌GEC6818板子TCP网络编程发送命令控制音视频

    TCP网络编程 (1)gec6818网络编程前期准备工作 (1).开发板和Ubuntu系统都处于教室局域网内 1.开发板和电脑(Ubuntu)都需要连接上教室的网线 2.开发板设置ip地址 在开发板终 ...

  8. tcp网络编程客户端和服务端及listen和tcp允许最大连接数

    tcp网络编程 tcp网络编程步骤: 由于tcp传输特点是可靠有连接,那么就有 1.客户端向服务端发送连接请求(SYN), 2.服务端接受请求并向客户端发送(SYN+ACK); 3.客户端向服务端回复 ...

  9. Qt之网络编程错误总结

    来自http://blog.csdn.net/qianguozheng/article/details/6849293 最近在做Qt网络编程,主要是项目需要,学习下Qt下网络编程的多线程实现. 1.Q ...

  10. 基于数据库及TCP网络编程实现的电子词典

    目录 一.前言 二.项目介绍 三.功能实现 3.1. 用户注册 3.1.1 功能演示 3.1.2 功能函数实现 3.2. 用户登录 3.2.1 功能演示 3.2.2 功能函数实现 3.3. 查询单词 ...

最新文章

  1. easypoi必填项_GitHub - wangjingting/poi-utils: help you more easy read or write excel file
  2. 科学家们竟用乐高观察细胞,网友:万万没想到啊
  3. linux批量备份服务器配置文件和目录的脚本
  4. J2ME下访问.net的webservice
  5. python5个功能_5个常用的定制Python功能代码
  6. Ansible-----循环
  7. UI2Code智能生成Flutter代码——版面分析篇
  8. SQL视图学习(入门概念理解)
  9. 29岁女程序员感慨:硕士学历,脱单比找工作买房还难,有同感么?
  10. Java学习之路 之 使用技巧篇
  11. 为虚幻4安装VS2019
  12. click事件修改css_CSS Click事件
  13. LimeSDR官方系列教程(四):To Pothos and Beyond
  14. ubuntu 网易云音乐安装
  15. TypeScript 中括号用法笔记
  16. 第二章使用VLAN隔离广播域
  17. UWB测距及定位原理
  18. 借助python用Tushare查询股票价格并存入Mysql数据库中
  19. java聊天室代码实训总结_java实训聊天系统报告总结
  20. Ubuntu20.04安装Docker以及Docker安装微信、企业微信、Docker常用命令

热门文章

  1. 白帽子讲web安全(一)
  2. 云存储收银系统_重磅丨远丰云收银系统WebPos升级 开启智能收银新时代
  3. nbu mysql_mysql数据备份之NBU
  4. ERPS协议学习笔记
  5. 通用规范汉字表 一级字表(3500字)
  6. 百度云OCR身份证识别
  7. ubuntu18.04编译Open Pose 1.7
  8. Oracle数据库经典50题(附答案),写完不理解的来打我
  9. JLink EDU v7.58 变砖修复
  10. 数据治理--浅谈数据标准、元数据、主数据、数据模型