需要在.pro文件中加
QT += network 客户端头文件:
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include <QObject>
#include <QTcpSocket>
class TcpClient :public QObject
{
Q_OBJECT
public:
TcpClient();
~TcpClient();
bool sendData(char *pBuffer,int nLen = 0);
bool sendData(const QByteArray& array);
protected:
void init();
private slots:
void slotReadData();
void slotDisconnected();
void slotConnected();
signals:
void sigRecvData(char* buffer,int nLen);
void sigRecvArray(const QByteArray& array);
void sigConnected();
void sigDisconnect();
private:
QTcpSocket *m_pSocket;
//缓冲区
char *m_pBuffer;
//缓冲区长度
int m_nBuffSize;
};
客户端源文件
#endif // TCPCLIENT_H
#include "TcpClient.h"
#include <QHostAddress>
#include <QHostInfo>
#include <QDebug>
TcpClient::TcpClient()
{
init();
}
TcpClient::~TcpClient()
{
}
bool TcpClient::sendData(char *pBuffer, int nLen)
{
if(m_pSocket != Q_NULLPTR)
{
if(m_pSocket->write(pBuffer,nLen) <= 0)
{
qDebug()<<"send failed!";
return false;
}
}
return true;
}
bool TcpClient::sendData(const QByteArray &array)
{
if(m_pSocket != Q_NULLPTR)
{
if(m_pSocket->write(array) <= 0)
{
qDebug()<<"send failed!";
return false;
}
}
return true;
}
void TcpClient::init()
{
QHostInfo hostInfo = QHostInfo::fromName(QHostInfo::localHostName());
m_pSocket = new QTcpSocket;
m_pSocket->connectToHost("192.168.1.35",5000); //链接服务器
connect(m_pSocket,&QTcpSocket::readyRead,this,&TcpClient::slotReadData); //读取服务端数据
connect(m_pSocket,&QTcpSocket::disconnected,this,&TcpClient::slotDisconnected); //断开链接
connect(m_pSocket,&QTcpSocket::connected,this,&TcpClient::slotConnected); //连接服务器
}
void TcpClient::slotReadData()
{
if(m_pSocket != Q_NULLPTR)
{
QByteArray array = m_pSocket->readAll();
if(!array.isEmpty())
{
m_nBuffSize = array.size();
m_pBuffer = array.data();
emit sigRecvData(array.data(),array.size());
emit sigRecvArray(array);
}
}
}
void TcpClient::slotDisconnected()
{
qDebug()<<"disConnected server";
emit sigDisconnect();
}
void TcpClient::slotConnected()
{
qDebug()<<"Connected server";
emit sigConnected();
}