• QTcpSever和QTcpSocket实现多线程客户端和服务端;


    QTcpServer提供了newConnection信号, 可以通过connect实现连接槽函数,利用nextPendingConnection

    函数获取连接的QTcpSocket * ;也可以继承QTcpServer派生, 复写虚函数incomingConnection(在连接上时,

    会自动触发该函数,传参handle);

     virtual void incomingConnection(qintptr handle);
    

    通过setSocketDescriptor 函数建立QTcpSocket;

    virtual bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
                                 OpenMode openMode = ReadWrite);
    
    QTcpSocket *pSock = new QTcpSocket;
    if( ! pSock->setSocketDescriptor(handle) )
    {
        ...
    }
    

    QTcpSocket有几个继承于 QAbstractSocket, 而QAbstractSocket又继承于QIODevice, 可以看出QtcpSocket可以类似

    IO接口一样的进行操作;

    virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
    virtual void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
    

    通过connectToHost函数可以连接服务端, 在连接服务端时,将发送信号:

    void connected();
    void disconnected();
    void stateChanged(QAbstractSocket::SocketState);
    

    当socket缓冲区内有数据时,将触发readyRead信号, 利用 bytesAvailable函数可以获取缓冲区内的数据长度, read(length)读取指定长度的数据;

    
    
  • 相关阅读:
    ros 录制
    shell 截取字符串
    Linux 关机
    shell获取字符串长度
    ubuntu14.04 设置开机自启动脚本
    获取本机ip的shell脚本
    shell 杀掉指定进程的服务
    html 绘制矩形轨迹,选中区域
    shell模拟ctrl c停止
    shell 字符串提取数字
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10774328.html
Copyright © 2020-2023  润新知