3

我正在运行 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())
4

1 回答 1

1

您必须创建一个多线程服务器。在多线程服务器中,为每个客户端创建一个新的独立线程(与主线程分开)。

因此,当您的客户端停止时,服务器只完成客户端的线程,而主线程继续运行,等待新的客户端。

Web中有很多多线程服务器的例子。这里有一些例子:

于 2021-04-19T22:12:45.297 回答