QT多线程网络通信
使用QT提供的类进行基于TCP的套接字通信需要用到两个类:
1、QTcpServer 服务器类,用于监听客户端连接以及和客户端建立连接
2、QTcpSocket 通信的套接字类,客户端、服务器端都需要使用
这两个套接字通信类都属于网络模块 network;QFile和QTcpSocket的祖先类都是QIODevice
QTcpServer
公共成员函数
QTcpServer::QTcpserver(QObject *parent = Q_NULLPTR);
//构造成员函数,构造一个用于监听的服务器端对象
//传入的参数是一个父对象
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
bool QTcpServer::isListening() const
QHostAddress Qrcpserver::serverAddress()const;
quint16 QTcpServer::serverport()const
QTcpSocket* QTcpSerVer::nextPendingConnection();
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
[signal] void QTcpServer::newConnection()
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
QTcpSocket
QTcpSocket 是一个套接字通信类,不管是客户端还是服务器端都需要使用。在Qt中发送和接收数据也属于IO操作(网络I0),先来看一下这个类的继承关系:
接收数据:
qint64 QIODevice::read(char*data,qint64 maxsize);
QByteArray QIODevice::read(qint64 maxsize);
QByteArray QIODevice::readAll();
发送数据:
qint64 QIoDevice::write(const char*data,qint64 maxsize);
qint64 QIODevice::write(const char*data);
qint64 QIODevice::write(const QByteArray&byteArray);
信号:
[signal]void QIODevice::readyRead();
[signal]void QAbstractsocket::connected();
[signal]void QAbstractsocket::disconnected();
通信流程
1.创建套接字服务器 Qrcpserver 对象
2.通过Qrcpserver 对象设置监听,即:QTcpserver::listen()
3.基于QTcpServer::newconnection()信号检测是否有新的客户端连接
4.如果有新的客户端连接调用QTcpsocket *QTcpserver::nextpendingconnection()得到通信的套接字对象
5.使用通信的套接字对象 QTcpSocket 和客户端进行通信
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)