如何设置QTcpSocket心跳间隔?
How to set QTcpSocket heartbeat interval?
我注意到 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()
返回的文件描述符在连接处于活动状态时有效。
我注意到 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()
返回的文件描述符在连接处于活动状态时有效。