python - 在特定超时后将 python 服务器更改为客户端
问题描述
所以,我有一个服务器套接字定义为server_sock
当前代码如下所示
# define a variable server_sock
server_sock.bind(("", PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
client_sock, client_info = server_sock.accept()
print("[+] Accepted connection from ", client_info)
server_sock.close()
client_sock.close()
# define a variable sock
sock.connect((host, port)) # This will be the client socket
现在,这段代码将创建一个server_sock
,监听传入的连接,在任何客户端连接后,它将关闭这些套接字并使用另一个作为客户端sock
。
我打算做的是首先让代码作为服务器运行(即server_sock
应该等待连接)特定超时(假设10秒)。
10 秒后,server_sock
应该自行关闭,然后下一段代码(即客户端部分)应该开始。
因此,在特定的超时后,它类似于从服务器模式更改为客户端模式。
我很难解决这个问题。通常server_sock.accept()
线路会被卡住,直到它遇到新的连接,否则它不会继续。
那么,我怎样才能实现在特定超时后破坏整个事情的东西。
请注意,我在 Windows 和 UNIX 上跨平台运行此代码。所以,我一直在寻找一些signal
具体的答案,但 Windows 不支持某些 Signal。
编辑:
很多人都说要settimeout()
在socket上使用。但这并不能回答我需要的行为。
因为假设我在 server_sock 模式下从设备获得连接,我想在此后继续通信,而不是突然关闭套接字。
无论执行什么操作,settimeout() 都会关闭套接字。所以,这无法回答我的情况
解决方案
您可以简单地使用超时功能。
# define a socket variable server_sock
server_sock.settimeout(10.0) #setting timeout for 10 sec
# rest of your code