【发布时间】:2021-12-20 23:07:57
【问题描述】:
我注意到Qt QTcpSocket setSocketOption(QTcpSocket.KeepAliveOption, 1) 可以保持两个连接处于活动状态,但我不知道如何设置KeepAlive 间隔? ç
在python中可以简单地通过这个sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))来做,那么在Qt中有没有这样简单的方法?
【问题讨论】:
我注意到Qt QTcpSocket setSocketOption(QTcpSocket.KeepAliveOption, 1) 可以保持两个连接处于活动状态,但我不知道如何设置KeepAlive 间隔? ç
在python中可以简单地通过这个sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))来做,那么在Qt中有没有这样简单的方法?
【问题讨论】:
您可以使用 QTcpSocket 文件描述符来创建一个 python 套接字对象以便能够使用所需的方法:
import socket
import sys
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtNetwork import QAbstractSocket, QTcpSocket
def main():
app = QCoreApplication([])
qtcpsocket = QTcpSocket()
def handle_connected():
print("CONNECTED")
if (
sys.platform == "win32"
and qtcpsocket.state() != QAbstractSocket.SocketState.UnconnectedState
):
fd = int(qtcpsocket.socketDescriptor())
print(fd)
pysocket = socket.socket(fileno=fd)
pysocket.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
QCoreApplication.quit()
qtcpsocket.connected.connect(handle_connected)
qtcpsocket.connectToHost("google.com", 80)
app.exec_()
if __name__ == "__main__":
main()
注意:方法QTcpSocket::socketDescriptor()返回的文件描述符在连接处于活动状态时有效。
【讨论】: