QT-使用QTcpSocket建立TCP客户端连接

这篇具有很好参考价值的文章主要介绍了QT-使用QTcpSocket建立TCP客户端连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

使用QT的QTcpSocket建立TCP客户端方式,十分的简单,上手也快,代码量不多,并且还自动支持重连接机制,也就是说如果你的服务端突然死机了,然后服务端又重启,那么我们的客户端这个时候是会自动去再连接的,不需要你的程序再做重连接的机制,所以我们应用起来是十分方便的。


一、QT配合环境

qt socket,Qt,qt,tcp/ip,开发语言

二、程序内容

1.实例头文件

代码如下:

#pragma once
#include <QThread>
#include <QObject>
#include <QTcpSocket>
#include <QThread>
#include <QTimer>
#include <QMutex>
#include <QAbstractSocket>

// 链表操作类型
enum eType
{
	APPEND = 0,          
	TAKE_FIST = 1,       
};

class CSocket: public QObject
{
	Q_OBJECT

public:
	cSocketClient(QObject *parent = 0);
	~cSocketClient();

public:
	// 连接
	bool connect(QString strIp, int nPort);
	// 发送数据
	bool sendData(QString strData);
	// 是否连接
	bool isConnected();
	// 获取数据
	QString getRecieveData();

private slots:
   // 接受服务器的数据槽函数
	void slotRecieve();
   // 连接状态变化的时候触发
	void slotStateChanged(QAbstractSocket::SocketState state);

private:
	void operatorRevieveData(eType type, QString& strItem);

private:
	QTcpSocket *m_pSocket;             // 客户端Socket对象
	QString m_strServerIp;             // 服务端IP
	QList<QString> m_strReciveList;    // 接受回来的数据放到链表里面
	bool m_bConnected;                 // 连接的标志
	int m_nConnectWaitTimes;           // 连接的等待时间
	int m_nServerPort;                 // 服务端端口号
};

2.源文件

代码如下:文章来源地址https://www.toymoban.com/news/detail-625426.html

#include "CSocket.h"

CSocket::cSocketClient(QObject *parent)
	: QObject(parent)
	,m_bConnected(false)
	,m_nConnectWaitTimes(1*1000)
	,m_strServerIp("")
	,m_nServerPort(0)
{
	m_strReciveList.clear();

	m_pSocket = new QTcpSocket(this);

	QObject::connect(m_pSocket, SIGNAL(readyRead()), this, SLOT(slotRecieve()));
	QObject::connect(m_pSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(slotStateChanged(QAbstractSocket::SocketState)));

}

CSocket::~cSocketClient()
{
	if (m_pSocket != nullptr)
		m_pSocket->close();
}

// 连接服务端
bool CSocket::connect(QString strIp, int nPort)
{
	if (m_bConnected)
		return true;

	m_strServerIp = strIp;
	m_nServerPort = nPort;

	// 设置IP和端口号连接
	m_pSocket->connectToHost(m_strServerIp, m_nServerPort);

	// 设置超时连接时间
	m_bConnected = m_pSocket->waitForConnected(1 * 1000);


	return m_bConnected;
}

// 给服务端发送数据
bool CSocket::sendData(QString strData)
{
	if (!m_bConnected)
		return false;

	int nRet = m_pSocket->write(strData.toStdString().c_str(), strlen(strData.toStdString().c_str()));

	return true;
}

// 是否连接
bool CSocket::isConnected()
{
	return m_bConnected;
}

// 接受服务返回的数据
void CSocket::slotRecieve()
{
	QByteArray arrayReady = m_pSocket->readAll();
	QString strRecive = QString::fromStdString(arrayReady.toStdString());

	if (!strRecive.isEmpty())
		operatorRevieveData(OT_APPEND, strRecive);
}

// 接受数据
QString CSocket::getRecieveData()
{
	QString strItem;
	operatorRevieveData(OT_TAKE_FIST, strItem);
	return strItem;
}

// 接受数据操作链表
void CSocket::operatorRevieveData(eType type, QString& strItem)
{
	static QMutex mutex;

	mutex.lock();
	switch (type)
	{
	
	// 追加
	case APPEND:
	{
		m_strReciveList << strItem;
	}break;

	// 获取首元素,并删除首元素
	case TAKE_FIST:
	{
		if (m_strReciveList.size() > 0)
			strItem = m_strReciveList.takeFirst();
	}break;

	default:
		break;
	}

	mutex.unlock();
}

// 连接状态切换
void CSocket::slotStateChanged(QAbstractSocket::SocketState state)
{
	switch (state)
	{
		case QAbstractSocket::SocketState::UnconnectedState:
		{
			m_bConnected = false;
		}break;

		case QAbstractSocket::SocketState::ConnectedState:
		{
			m_bConnected = true;
		}break;

		default:
			break;
	}
}

到了这里,关于QT-使用QTcpSocket建立TCP客户端连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt中使用TCP服务端及客户端

    TCP(Transmission Control Protocol)是一种可靠、高度优化的互联网通信协议,广泛用于各类网络应用程序中。在这篇博客中,我们将介绍如何在Qt中使用TCP服务端及客户端。 要使用Qt创建TCP服务器,需要完成以下步骤: 步骤1:创建QTcpServer对象 步骤2:监听连接请求 在开始监听之前

    2024年02月15日
    浏览(47)
  • TCP/IP客户端和服务器端建立通信过程

    使用Qt提供的类进行基于 TCP 的套接字通信需要用到两个类: QTcpServer 类用于监听客户端连接以及和客户端建立连接,在使用之前先介绍一下这个类提供的一些常用API函数: 构造函数 给监听的套接字设置监听 listen() 函数 在代码中 通过启动监听按钮 设置监听 参数: address :

    2024年02月07日
    浏览(49)
  • QT TCP客户端实现

    QTcpSocket实例首先是通过connectToHost()尝试连接到服务器,需要指定服务器的IP地址和端口。connectToHost()是异步方式连接服务器,不会阻塞程序运行,连接后发射connected()信号。 如果需要使用阻塞方式连接服务器,则使用waitForConnected()函数阻塞程序运行,直到连接成功或失败。

    2024年02月09日
    浏览(36)
  • Qt 服务器/客户端TCP通讯

    最近需要用到TCP/IP通讯,这边就先找个简单的例程学习一下。Qt的TCP通讯编程可以使用QtNetwork模块,QtNetwork模块提供的类能够创建基于TCP/IP的客户端与服务端应用程序,一般会使用QTcpSocket、QTcpServer类 网络通信方式主要有两种:TCP与UDP。以下拷贝网络上总结两者之间的区别:

    2023年04月26日
    浏览(57)
  • QT实现tcp服务器客户端

    2024年02月07日
    浏览(42)
  • QT实现客户端断开连接

    Widget.cpp Widget.h main.cpp

    2024年04月14日
    浏览(45)
  • 【Qt专栏】Qt实现TCP服务端和客户端通信

    网络通信是程序员必须会的一项生存技能,这里简单的实现了服务端和客户端通信的两个小示例,代码可以直接拿来用,开发环境是Qt5.9.6。 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 好了,两个小程序写完并

    2024年02月12日
    浏览(29)
  • QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-1 环境搭建

    前端时间做了一个项目,要求在PC端使用QT制作一个客户端,用来接收从单片机上传到Onennet的数据,并且还要下发指令。当时弄了好几天,中途遇见了非常多的问题,所以写下这篇文章记录一下,同时分享一下自己的经验。 我的环境:QT 5.12.6 总结下我遇见的难点: 1,环境配

    2024年02月11日
    浏览(56)
  • java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

    首先需要知道java里如何创建一个Socket服务器端。 提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。如果一直未连接那么会一直处于阻塞状态 了解了如何创建一个socket服务器端后。那么如何实现给指定的连接客户端发送消息呢?首先我

    2024年02月11日
    浏览(47)
  • QT实现TCP通信(服务器与客户端搭建)

    创建一个QTcpServer类对象,该类对象就是一个服务器 调用listen函数将该对象设置为被动监听状态,监听时,可以监听指定的ip地址,也可以监听所有主机地址,可以通过指定端口号,也可以让服务器自动选择 当有客户端发来连接请求时,该服务器会自动发射一个newConnection信号

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包