Qt实现TCP客户端和服务端

Qt 中实现 TCP 客户端和服务器可以使用 Qt 网络模块。以下是一个简单的示例,包括服务器和客户端的基本实现。

TCP 服务端实现

首先,我们来创建一个简单的 TCP 服务器。你需要一个包含以下内容的 C++ 源文件,比如 tcp_server.cpp:

cpp

#include <QTcpServer>  #include <QTcpSocket>  #include <QCoreApplication>  #include <iostream>  

class TcpServer : public QTcpServer {  

    Q_OBJECT  public:  

    TcpServer(QObject *parent = nullptr) : QTcpServer(parent) {  

        connect(this, &QTcpServer::newConnection, this, &TcpServer::onNewConnection);  

    }  

private slots:  

    void onNewConnection() {  

        QTcpSocket *socket = nextPendingConnection();  

        std::cout << "New client connected: " << socket->peerAddress().toString().toStdString() << std::endl;  

 

        connect(socket, &QTcpSocket::readyRead, [socket]() {  

            QByteArray data = socket->readAll();  

            std::cout << "Received: " << data.toStdString() << std::endl;  

            socket->write("Hello from server");  

        });  

 

        connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);  

    }  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

    

    TcpServer server;  

    if (!server.listen(QHostAddress::Any, 1234)) {  

        std::cerr << "Server could not start!" << std::endl;  

        return 1;  

    }  

    

    std::cout << "Server started on port 1234." << std::endl;  

    return app.exec();  

}  

#include "tcp_server.moc"  

TCP 客户端实现

接下来,创建一个简单的 TCP 客户端,包含以下内容,比如 tcp_client.cpp:

cpp

#include <QTcpSocket>  #include <QCoreApplication>  #include <iostream>  

class TcpClient : public QObject {  

    Q_OBJECT  public:  

    TcpClient(const QString &host, quint16 port, QObject *parent = nullptr) : QObject(parent) {  

        socket = new QTcpSocket(this);  

        connect(socket, &QTcpSocket::connected, this, &TcpClient::onConnected);  

        connect(socket, &QTcpSocket::readyRead, this, &TcpClient::onReadyRead);  

 

        socket->connectToHost(host, port);  

    }  

private slots:  

    void onConnected() {  

        std::cout << "Connected to server." << std::endl;  

        socket->write("Hello from client");  

    }  

 

    void onReadyRead() {  

        QByteArray data = socket->readAll();  

        std::cout << "Received from server: " << data.toStdString() << std::endl;  

    }  

private:  

    QTcpSocket *socket;  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

    

    TcpClient client("127.0.0.1", 1234);  

    

    return app.exec();  

}  

#include "tcp_client.moc"  

编译和运行

确保你的项目文件(.pro 文件)中包含网络模块。在 .pro 文件中添加:

pro

QT += core network  

CONFIG += c++11  

然后可以使用 qmake 和 make 进行编译:

bash

qmake  

make  

先运行 tcp_server,然后运行 tcp_client。你应该能在客户端和服务器端看到发送和接收的消息。

总结

以上示例实现了一个基本的 TCP 服务器和客户端。服务器在端口 1234 上监听连接,一旦有客户端连接,将接收消息并响应。客户端连接服务器,发送消息,并打印接收到的回复。你可以根据实际需求扩展和修改这个基础实现。

 

posted @   远方是什么样子  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2024-02-26 Windows下破解SecureCRT和SecureFx软件
点击右上角即可分享
微信分享提示