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