【发布时间】:2023-03-11 06:50:01
【问题描述】:
我正在尝试建立一个可以保持活动状态的套接字连接,以便在连接丢失的情况下。所以基本上我想保持服务器始终打开(最好也是客户端)并在连接丢失后重新启动客户端。但是,如果一端关闭,则两端都关闭。我通过将两端都放在同一台计算机上"localhost" 并单击 X 按钮来模拟这一点。这可能是我问题的根源吗?
无论如何我的连接代码
m.connect(("localhost", 5000))
位于if 和try 和while 例如
while True:
if tryconnection:
#Error handeling
try:
m.connect(("localhost", 5000))
init = True
tryconnection = False
except socket.error:
init = False
tryconnection = True
在我的代码末尾,当我按下按钮时,我只是一个m.send("example"),如果返回错误,则尝试连接到"localhost" 的代码再次开始。该服务器是一个非常通用的服务器设置,在x.accept() 周围有一个while 循环。那么如何在连接关闭时保持它们都处于活动状态,以便它们在再次打开时可以重新连接。还是我的代码没问题,只是在同一台计算机上模拟就搞砸了?
【问题讨论】:
-
TCP 不能“保持连接活动” - 所以至少有两个选择:1. 使用 UDP,它是无连接的,并在所有需要的层之上进行传输数据可靠且受流量控制(即复制相当多的 TCP 堆栈:-o,或 2)继续使用 TCP,但在其之上添加一个层,以便当客户端重新连接时,客户端会提供一些特定于客户端的信息(a令牌/cookie) 到服务器,它允许服务器恢复以前的连接。这是您的浏览器可以使用 cookie 恢复与服务器的 Web 会话的方式。
-
你有我如何添加图层的例子吗?我比较新。谢谢
-
当客户端连接时,它可以自动发送一条消息说“这是我的令牌,它是旧的”或“没有令牌”,如果客户端没有保存一个。在服务器上,对于新的 TCP 连接,等待令牌信息并验证令牌(例如,服务器是否有它的记录?是不是太旧了?用户注销了吗?)并适当地处理。例如如果客户端已注销,则用户需要重新验证。如果未注销最后一个连接是最近的,则恢复会话。这正是网站使用浏览器中的 cookie 记住用户并保留购物篮的方式。
标签: python sockets networking connection