QTcpServer与QTcpSocker使用说明Qt/Tcp/Server

QTcpServer使用说明

为了使用计算机的算力都集中到服务器上,可以使用tcp连接到服务器上,让服务器完成运算。客户端负责显示查询到的结果。下面的两个类的基类都是IODevice,所以与QFile对数据的操作是类似的。

QTcpServer与QTcpSocker使用说明Qt/Tcp/Server

QTcpServer

这个类是用作监听的类,这个可以用来监听来自客户端的tcp连接。主要用到的方法(API)有:

    // 设置监听
    bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);

    // 判断当前对象是否在监听, 是返回true,没有监听返回false
    bool QTcpServer::isListening() const

    // 如果当前对象正在监听返回监听的服务器地址信息, 否则返回 QHostAddress::Null
    QHostAddress QTcpServer::serverAddress() const;

    // 如果服务器正在侦听连接,则返回服务器的端口; 否则返回0
    quint16 QTcpServer::serverPort() const

    # address:通过类 QHostAddress 可以封装 IPv4、IPv6 格式的 IP 地址,QHostAddress::Any 表示自动绑定
    # port:   如果指定为 0 表示随机绑定一个可用端口。

    // 得到这个监听服务的子对象
    QTcpSocket *QTcpServer::nextPendingConnection();

这个类的信号

    // 连接错误时
    [signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError);
    // 得到一个新的连接时
    [signal] void QTcpServer::newConnection();

QTcpSocket

这个类是tcp连接套节字。可以作为 qtcpserver 的子对象,如 QTcpSocker *tsk = QTcpServer()::nextPendingConnection();这个类常用到的方法(API)有:

    // 连接到服务端
    void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
    void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, OpenMode openMode = ReadWrite);

    // 这里面主要的参数就是 地址 与 端口
    // 如果是域名 可以直接写 connectToHost("www.3245hao.com", 980); 如果是ip,则要写 connectToHost(QHostAddress("192.167.2.123"), 980);

在 Qt 中不管调用读操作函数接收数据,还是调用写函数发送数据,操作的对象都是本地的由 Qt 框架维护的一块内存。因此,调用了发送函数数据不一定会马上被发送到网络中,调用了接收函数也不是直接从网络中接收数据,关于底层的相关操作是不需要使用者来维护的。

    # 接收数据 readAll 信号
    // 指定可接收的最大字节数 maxSize 的数据到指针 data 指向的内存中
    qint64 QIODevice::read(char *data, qint64 maxSize);
    // 指定可接收的最大字节数 maxSize,返回接收的字符串
    QByteArray QIODevice::read(qint64 maxSize);
    // 将当前可用操作数据全部读出,通过返回值返回读出的字符串
    QByteArray QIODevice::readAll();

    # 发送数据 write api
    // 发送指针 data 指向的内存中的 maxSize 个字节的数据
    qint64 QIODevice::write(const char *data, qint64 maxSize);
    // 发送指针 data 指向的内存中的数据,字符串以 \0 作为结束标记
    qint64 QIODevice::write(const char *data);
    // 发送参数指定的字符串
    qint64 QIODevice::write(const QByteArray &byteArray);

    # 断开连接
    [signal] void QAbstractSocket::connected();

上一篇:Python爬虫:解决SSL证书验证问题


下一篇:基于SSM框架的电影订票系统