Server:
#include <QApplication>
#include <QObject>
#include <QLocalServer>
#include <QLocalSocket>
#include <qdebug.h>
#include <QTextStream>
#include <thread>
#include <QApplication>
class CServer
: public QObject
{
Q_OBJECT
public:
CServer()
: m_server(NULL)
{
m_server = new QLocalServer(this);
QObject::connect(m_server, SIGNAL(newConnection()), this, SLOT(serverNewConnectionHandler()));
}
~CServer()
{
m_server->close();
delete m_server;
}
void RunServer()
{
qDebug() << "Run Server ok";
QLocalServer::removeServer("ServerName");
bool ok = m_server->listen("ServerName");
if (!ok)
{
// TODO:
}
}
private slots:
void serverNewConnectionHandler()
{
qDebug() << "New Connection";
QLocalSocket* socket = m_server->nextPendingConnection();
QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyReadHandler()));
QObject::connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
}
void socketReadyReadHandler()
{
QLocalSocket* socket = static_cast<QLocalSocket*>(sender());
if (socket)
{
QTextStream stream(socket);
qDebug() << "Read Data From Client:" << stream.readAll();
QString response = "(SERVER)Hello Client";
socket->write(response.toUtf8());
socket->flush();
}
// 返回到客户端的void sendMessage方法,m_socket->waitForReadyRead()之后的操作
}
private:
QLocalServer *m_server;
};
Client:
#include <QApplication>
#include <QObject>
#include <QLocalServer>
#include <QLocalSocket>
#include <qdebug.h>
#include <QTextStream>
#include <thread>
#include <QApplication>
class CClient
: public QObject
{
Q_OBJECT
public:
CClient()
: m_socket(NULL)
{
m_socket = new QLocalSocket();
QObject::connect(m_socket, SIGNAL(connected()), this, SLOT(socketConnectedHandler()));
QObject::connect(m_socket, SIGNAL(disconnected()), this, SLOT(socketDisConnectedHandler()));
QObject::connect(m_socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(socketErrorHandler(QLocalSocket::LocalSocketError)));
}
~CClient()
{
m_socket->disconnectFromServer();
delete m_socket;
}
public:
void ConnectToServer(const QString &strServerName)
{
// 服务端的serverNewConnectionHandler成员方法将被调用
m_socket->connectToServer("ServerName");
if (m_socket->waitForConnected())
{
// TODO:
}
}
void sendMessage(const QString &msg)
{
m_socket->write(msg.toStdString().c_str());
m_socket->flush();
// waitForReadyRead将激发信号readyRead(), 我们在
// 与服务端创建连接时,已将readyRead(),绑定到了服务
// 端的槽socketReadyReadHandler成员方法
if (!m_socket->bytesAvailable())
m_socket->waitForReadyRead();
QTextStream stream(m_socket);
QString respond = stream.readAll();
qDebug() << "Read Data From Server:" << respond;
}
private slots:
void socketConnectedHandler()
{
qDebug() << "connected.";
}
void socketDisConnectedHandler()
{
qDebug() << "disconnected.";
}
void socketErrorHandler(QLocalSocket::LocalSocketError error)
{
qWarning() << error;
}
private:
QLocalSocket *m_socket;
};