- 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()
,它将阻塞,直到有可用连接或超时过期。参见
QTcpSocket
Fortune 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 –
QHostAddress
port – 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,则此函数将不会超时。