由于项目的要求,需要用到网络编程,我选择使用Qt来搭建程序,于是就在这篇文章中将Qt的 QTcpServer Class 翻译一遍,然后开始正式写码
文章目录
- PublicFunction
- Signal
- Detailed Description
- Member Function Documentation
- QTcpServer::QTcpServer(QObject *parent = nullptr)
- QTcpServer::~QTcpServer()
- void QTcpServer::acceptError(QAbstractSocket::SocketError socketError) [signal]
- void QTcpServer::addPendingConnection(QTcpSocket *socket) [protected]
- void QTcpServer::close()
- QString QTcpServer::errorString() const
- bool QTcpServer::hasPendingConnections() const [virtual]
- void QTcpServer::incomingConnection(qintptr socketDescriptor) [virtual protected]
- bool QTcpServer::isListening() const
- bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
- int QTcpServer::maxPendingConnectionst() const
- void QTcpServer::newConnect()
- QTcpSocket * QTcpServer::nextPendingConnection() [virtual]
- void QTcpServer::pauseAccepting()
- QNetworkProxy QTcpServer::proxy() const
- void QTcpServer::resumeAccepting()
- QHostAddress QTcpServer::serverAddress() const
PublicFunction
QTcpServer(QObject *parent = nullptr)
virtual ~QTcpServer()
void close()
QString errorString() const
virtual bool hasPendingConnections() const
bool isListension() const
bool listen(const QHostAddress &address = QHostAddress::Any, qint16 port = 0)
int maxPendingConnections() const
virtual QTcpSocket * nextPendingConnection()
void pauseAccepting()
QHostAddress serverAddress() const
QAbstractSocket::SocketError serverError() const
quint16 serverPort() const
void setMaxPendingConnections(int numConnections)
void setProxy(const QNetworkProxy &networkProxy)
bool setSocketDescriptor() const
bool waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
Signal
void acceptError(QAbstractSocket::SocketError socketError)
void newConnection()
Detailed Description
本类提供了TCP编程的基本方法。
本类可以使接受TCP连接请求变为可能,你可以指定一个port口,或者让QTcpServer自动选择一个,你可以监听指定IP发过来的消息或者所有物理地址上的消息
调用函数listen()来监听所有接受的连接请求,每当有一个客户端连接到服务器上的时候,都会发射信号 newConnection()。
调用函数 nextPendingConnection()来接收挂起的连接作为一个连接上的QTcpSocket,这个函数将返回一个指向QAbstractSocket::ConnectState中的QTcpSocket的指针,这样就可以在客户端来使用这个连接了。
如果发生了错误,函数serverError()将返回错误的类型,函数errorString()可以生成方便阅读的文本
当监听到连接的时候,服务器监听到的地址和port口将可以使用函数serverAddress()和函数serverPort来查看
调用函数close()来让QTcpServer停止监听请求的连接
尽管QTcpServer通常用在时间循环中,当然不用也是可以的,在这种情况下,你需要使用函数 waitForNewConnection(),在通道阻塞或超时之前
Member Function Documentation
QTcpServer::QTcpServer(QObject *parent = nullptr)
构造函数
QTcpServer::~QTcpServer()
析构函数,这个析构函数将会关闭所有的套接字的连接
void QTcpServer::acceptError(QAbstractSocket::SocketError socketError) [signal]
当有一个连接发生错误的时候,就发射这个信号,这个套接字参数表述了错误的类型
void QTcpServer::addPendingConnection(QTcpSocket *socket) [protected]
这个函数是 由函数 QTcpServer::incomingConnection() 添加新连接的套接字的时候被调用的
void QTcpServer::close()
关闭此套接字的连接
QString QTcpServer::errorString() const
返回最后出现的故障信息
bool QTcpServer::hasPendingConnections() const [virtual]
如果这个服务添加了一个连接则返回真,否则返回假
void QTcpServer::incomingConnection(qintptr socketDescriptor) [virtual protected]
此虚函数,是由QTcpServer发现当一个新的链接可用的时候调用的,此套接字描述符主要是接受连接的本地套接字描述符
基本的实现是先创造一个QTcpSocket,设置套接字描述符,然后储存QTcpSocket,然后再内部的连接列表中添加一个连接,最后发射newConnection()信号
重载此函数,报纸在连接可用的时候可以改变服务器的行为
如果服务器使用QNetworkProxy()函数,此套接字描述符可能会没有,可能只能用函数QTcpSocket::setSocketDescriptor()
注意:如果有其他的套接字通过重载此方法来创建,需要调用函数 addPendingConnection()函数来添加新的连接
注意:如果你想操作另一个线程的一个新接入的连接来作为一个新的QTcpSocket对象,你需要通过 socketDescriptor 到另一个线程中,并且使用它的setPendingConnection()函数来创建这个QTcpSOcket对象,
bool QTcpServer::isListening() const
如果这个服务当前正在监听进入的连接,返回真,否者反之
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
告诉服务器要监听的客户端的连接的地址和端口,如果port口设置为0,则将会自动的选择,如果地址是any则将会监听所有的网络接口
如果成功则返回真,反之反之
int QTcpServer::maxPendingConnectionst() const
返回最大数量的添加的连接,默认是30
void QTcpServer::newConnect()
如果有新的连接可用的话,这个信号将一直发出
QTcpSocket * QTcpServer::nextPendingConnection() [virtual]
返回下一个增加的连接,作为一个连接的QTcpSocket对象
这个套接字是作为服务器的子来创建的,这意味着当QTcpServer对象被析构的时候,这个socket也会删除,这是一个好的方式来删除对象
如果没有新加的连接的时候,这个函数将会返回0
void QTcpServer::pauseAccepting()
暂停接受新的连接,在排队的连接将保持排队。
QNetworkProxy QTcpServer::proxy() const
返回网络的套接字的代理,默认这个是存在的
void QTcpServer::resumeAccepting()
恢复开始接收新的连接
QHostAddress QTcpServer::serverAddress() const
返回服务器的IP,如果这个服务器在监听新的连接,要不然将会返回空
。。
其他的用到再看