首页 > 解决方案 > 在特定超时后将 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() 都会关闭套接字。所以,这无法回答我的情况

标签: pythonclient-server

解决方案


您可以简单地使用超时功能。

# define a socket variable server_sock

server_sock.settimeout(10.0)  #setting timeout for 10 sec

# rest of your code

推荐阅读