- class QTcpServer#
QTcpServer类提供了一个基于 TCP 的服务器。更多信息…继承自:
QSslServer概述
方法
def
__init__()def
close()def
errorString()def
isListening()def
listen()def
pauseAccepting()def
proxy()def
serverAddress()def
serverError()def
serverPort()def
setProxy()
虚方法
信号#
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式反馈给我们
详细描述#
此类允许接受传入的TCP连接。您可以指定端口或让
QTcpServer自动选择一个。您可以在特定地址或机器的所有地址上监听。调用
listen()使服务器侦听传入连接。每次客户端连接到服务器时,都会发出newConnection()信号。当客户端连接通过addPendingConnection()函数添加到挂起连接队列时,会发出pendingConnectionAvailable()信号。调用
nextPendingConnection()来接受挂起的连接作为已连接的QTcpSocket。此函数返回一个指向处于ConnectedState的QTcpSocket的指针,您可以使用它来与客户端通信。如果发生错误,
serverError()返回错误类型,可以通过调用errorString()获取对发生情况的人类可读描述。当监听连接时,服务器监听的地址和端口可以通过
serverAddress()和serverPort()获取。调用
close()使QTcpServer停止监听传入的连接。尽管
QTcpServer主要设计用于与事件循环一起使用,但也可以不使用事件循环来使用它。在这种情况下,您必须使用waitForNewConnection(),它将阻塞,直到有可用连接或超时过期。参见
QTcpSocketFortune Server Threaded Fortune Server Torrent Example构造一个
QTcpServer对象。parent传递给 QObject 构造函数。- acceptError(socketError)#
- 参数:
socketError –
SocketError
当接受新连接导致错误时发出此信号。
socketError参数描述了发生的错误类型。- addPendingConnection(套接字)#
- 参数:
套接字 –
QTcpSocket
此函数由
incomingConnection()调用,将套接字添加到待处理连接列表中。注意
如果您不希望中断待处理连接机制,则请勿忘记从重新实现的
incomingConnection()中调用此成员。在套接字被添加后,此函数将发出pendingConnectionAvailable()信号。- close()#
关闭服务器。服务器将不再监听传入连接。
参见
- errorString()#
- 返回类型:
str
返回最后一次发生的错误的可读描述。
- hasPendingConnections()#
- 返回类型:
bool
如果服务器有一个待处理连接,将返回
true,否则返回false。- incomingConnection(handle)#
- 参数:
handle –
qintptr
当有新的连接可用时,由
QTcpServer调用此虚拟函数。接受的连接的本地套接字描述符为socketDescriptor参数。基本实现创建一个
QTcpSocket,设置套接字描述符,然后将其存储在内部悬挂连接列表中。最后,发出newConnection()。重写此函数以改变服务器在连接可用时的行为。
如果此服务器使用
QNetworkProxy,则可能无法使用原生套接字函数的socketDescriptor,应仅使用setSocketDescriptor()。注意
如果在该方法的重写中创建了另一个套接字,则需要通过调用
addPendingConnection()将其添加到悬挂连接机制。注意
如果您想在另一个线程中处理一个传入连接作为新的
QTcpSocket对象,则必须向另一个线程传递socketDescriptor并在那里创建QTcpSocket对象,并使用其setSocketDescriptor()方法。- isListening()#
- 返回类型:
bool
如果服务器当前正在监听传入连接,则返回
true;否则返回false。参见
- listen([address=QHostAddress.Any[, port=0]])#
- 参数:
address –
QHostAddressport – int
- 返回类型:
bool
指示服务器在指定地址
address和端口port上监听传入连接。如果port为 0,系统将自动选择一个端口号。如果address为Any,则服务器将在所有网络接口上监听。成功时返回
true;否则返回false。- listenBacklogSize()#
- 返回类型:
int
返回将接受的连接的等待队列大小。
- maxPendingConnections()#
- 返回类型:
int
返回等待接受的连接的最大数量。默认为 30。
- newConnection()#
每次可用新连接时都会发出此信号,无论它是否已添加到等待连接队列中。
- nextPendingConnection()#
- 返回类型:
返回下一个等待连接作为连接的
QTcpSocket对象。此套接字作为服务器的子对象创建,这意味着当
QTcpServer对象被销毁时,它将被自动删除。仍然建议在完成操作后明确删除对象,以避免内存浪费。在没有等待连接时调用此函数将返回
None。注意
返回的
QTcpSocket对象不能在另一个线程中使用。如果您想从另一个线程中使用传入连接,您需要重写incomingConnection()。- pauseAccepting()#
暂停接受新的连接。队列中的连接将保留在队列中。
- pendingConnectionAvailable()#
每次添加新连接到待处理连接队列时,都会发射此信号。
- proxy()#
- 返回类型:
返回此套接字的网络代理。默认使用
DefaultProxy。- resumeAccepting()#
重新开始接受新连接。
- serverAddress()#
- 返回类型:
如果服务器正在监听连接,则返回服务器的地址;否则返回
Null。- serverError()#
- 返回类型:
返回最后一次发生的错误代码。
- serverPort()#
- 返回类型:
int
如果服务器正在监听连接,则返回服务器的端口;否则返回 0。
- setListenBacklogSize(size)#
- 参数:
size – int
将待接受连接的等待队列大小设置为
size。操作系统可能会减少或忽略此值。默认情况下,队列大小为 50。- setMaxPendingConnections(numConnections)#
- 参数:
numConnections – int
设置已接受的连接请求数量的最大值为
numConnections。在调用nextPendingConnection()之前,QTcpServer将不会处理超过numConnections个传入连接。默认情况下,最大请求数为 30。即使服务器已达到最大请求数量(即
QTcpSocket仍可发射 connected() 信号),客户端仍可能建立连接。在这种情况下,QTcpServer将停止接受新的连接,但操作系统可能仍然在某些队列中保留这些连接。- setProxy(networkProxy)#
- 参数:
networkProxy –
QNetworkProxy
警告
本节包含自动从 C++ 转换为 Python 的代码片段,可能存在错误。
将此套接字的显式网络代理设置为
networkProxy。要禁用此套接字使用代理,请使用
NoProxy代理类型server.setProxy(QNetworkProxy.NoProxy)
- setSocketDescriptor(socketDescriptor)#
- 参数:
socketDescriptor –
qintptr- 返回类型:
bool
设置服务器在监听传入连接时应使用的套接字描述符为
socketDescriptor。如果成功设置套接字返回true;否则返回false。假设套接字处于监听状态。
- socketDescriptor()#
- 返回类型:
qintptr
返回服务器用于监听传入指令的原生套接字描述符,如果服务器未监听则返回 -1。
如果服务器正在使用
QNetworkProxy,返回的描述符可能无法与本地套接字函数一起使用。- waitForNewConnection(msec)#
- 参数:
msec – int
- 返回类型:
(retval, timedOut)
等待最多
msec毫秒或直到有传入连接可用。如果存在连接返回true;否则返回false。如果操作超时并且timedOut不是None,则 * ``timedOut`` 将设置为 true。这是一个阻塞函数调用。不建议在单线程GUI应用程序中使用它,因为整个应用程序将停止响应,直到函数返回。waitForNewConnection()主要用于没有事件循环可用的情况。
非阻塞的替代方案是连接到
newConnection()信号。如果 msec 是 -1,则此函数将不会超时。