QT C-S

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;
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值