#ifndef XSOCKETCLIENT_H
#define XSOCKETCLIENT_H
#include <QTcpSocket>
#include <QTcpServer>
class XSocketClient : public QObject
{
Q_OBJECT
public:
XSocketClient();
~XSocketClient();
///做为服务端接受连接时,设置接受的socket
void SetAcceptSocket(QTcpSocket *pSocket);
///做为客户端主动连接时使用
void ConnectTo(QString ip, quint16 port);
bool IsConnected();
bool SendData(QByteArray by);
QTcpSocket *GetSocket();
signals:
void signalOnReceiveData(QByteArray by);
void signalOnConnected();
void signalOnDisconnected();
protected slots:
virtual void OnData(QByteArray by){}
virtual void OnConnected();
virtual void OnDisconnected();
void OnDataReady();
private:
void InitClientSocket(QTcpSocket *pSocket);
private:
QTcpSocket *m_pClientSocket = nullptr;
};
#endif // XSOCKETCLIENT_H
#include "xsocketclient.h"
XSocketClient::XSocketClient()
{
}
XSocketClient::~XSocketClient()
{
if(nullptr != m_pClientSocket)
{
m_pClientSocket->deleteLater();
}
}
void XSocketClient::SetAcceptSocket(QTcpSocket *pSocket)
{
m_pClientSocket = pSocket;
InitClientSocket(m_pClientSocket);
}
void XSocketClient::ConnectTo(QString ip, quint16 port)
{
if(nullptr == m_pClientSocket)
{
m_pClientSocket = new QTcpSocket(this);
}
InitClientSocket(m_pClientSocket);
m_pClientSocket->connectToHost(QHostAddress(ip), port);
}
bool XSocketClient::IsConnected()
{
bool bre = false;
if(nullptr != m_pClientSocket)
{
bre = (m_pClientSocket->state() == QTcpSocket::ConnectedState);
}
return bre;
}
bool XSocketClient::SendData(QByteArray by)
{
bool bre = false;
if(nullptr != m_pClientSocket)
{
bre = (by.size() == m_pClientSocket->write(by));
}
return bre;
}
QTcpSocket *XSocketClient::GetSocket()
{
return m_pClientSocket;
}
void XSocketClient::OnDataReady()
{
QTcpSocket *pSocket = qobject_cast<QTcpSocket*>(sender());
if(nullptr != pSocket)
{
QByteArray by = pSocket->readAll();
emit signalOnReceiveData(by);
OnData(by);
}
}
void XSocketClient::OnConnected()
{
//QTcpSocket *pSocket = qobject_cast<QTcpSocket*>(sender());
}
void XSocketClient::OnDisconnected()
{
//QTcpSocket *pSocket = qobject_cast<QTcpSocket*>(sender());
}
void XSocketClient::InitClientSocket(QTcpSocket *pSocket)
{
if(nullptr != pSocket)
{
connect(pSocket, SIGNAL(readyRead()), SLOT(OnDataReady()));
connect(pSocket, SIGNAL(connected()), SLOT(OnConnected()));
connect(pSocket, SIGNAL(disconnected()), SLOT(OnDisconnected()));
connect(pSocket, SIGNAL(connected()), SIGNAL(signalOnConnected()));
connect(pSocket, SIGNAL(disconnected()), SIGNAL(signalOnDisconnected()));
}
}