【发布时间】:2021-04-18 20:28:10
【问题描述】:
我正在运行 2 个 python 脚本:一个服务器脚本和一个连接到服务器的客户端(均为 Windows 10)。
如果例如由于客户端系统重新启动而导致连接丢失并且python脚本确实在启动时自动运行,我该如何重新连接?因为当我不重新启动服务器时,客户端重新启动时会出错。
是否有人知道检查客户端脚本是否仍在运行的功能或技巧(以便我可以远程重新启动服务器)?甚至更好的是,如果客户端系统重新启动,服务器不会出现连接错误。
显示:简单的 python 聊天室
服务器
import time, socket, sys
new_socket = socket.socket()
host_name = socket.gethostname()
s_ip = socket.gethostbyname(host_name)
port = 8080
new_socket.bind((host_name, port))
print( "Binding successful!”)
print("This is your IP: ", s_ip)
name = input('Enter name: ')
new_socket.listen(1)
conn, add = new_socket.accept()
print("Received connection from ", add[0])
print('Connection Established. Connected From: ',add[0])
client = (conn.recv(1024)).decode()
print(client + ' has connected.')
conn.send(name.encode())
while True:
message = input('Me : ')
conn.send(message.encode())
message = conn.recv(1024)
message = message.decode()
print(client, ':', message)
客户
import time, socket, sys
socket_server = socket.socket()
server_host = socket.gethostname()
ip = socket.gethostbyname(server_host)
sport = 8080
print('This is your IP address: ',ip)
server_host = input('Enter friend\'s IP address:')
name = input('Enter Friend\'s name: ')
socket_server.connect((server_host, sport))
socket_server.send(name.encode())
server_name = socket_server.recv(1024)
server_name = server_name.decode()
print(server_name,' has joined...')
while True:
message = (socket_server.recv(1024)).decode()
print(server_name, ":", message)
message = input("Me : ")
socket_server.send(message.encode())
【问题讨论】:
-
如果你需要一个恒定的连接,实现一个心跳系统,在这个系统中,客户端定期向服务器发送某种消息,如果它没有及时响应,则考虑连接丢失并重新- 建立一个。
-
您需要提供更多关于您如何实现服务器和客户端的详细信息 - 以及一些实际代码。编写服务器和客户端软件的方法有很多种,但在不知道您是如何完成的情况下很难为您提供帮助。
-
@Raniz,感谢您的反馈!我更新了我的帖子,现在它有源代码了。
-
@AKX 这将很难,因为发送和接收命令被阻塞。或者你可以制作线程,但我不确定这是否是解决方案。
-
@Augurkenplukker12 您需要设置合适的套接字超时。
标签: python python-3.x server python-server-pages