Я пытаюсь построить сервер и клиент, один сервер и около 100 клиентов, и его можно увеличить, поэтому клиенты будут читать базу данных и извлекать из нее строки, а затем каждый клиент будет отправлять на сервер, используя цикл forиспользуя функцию range (), чтобы узнать, сколько строк клиент выбрал из таблицы базы данных, и он будет посылать каждую строку на сервер одну за другой.
мне нужны примеры кодов для решения этой проблемы, и что будет лучшимрешение для этого.
также я хотел, чтобы клиент подключался к серверу, если соединение живое, а затем отправлять все данные по одному на сервер .. если каким-то образом соединение теряется .. закройте существующее соединение и снова создайте новое соединениезатем возобновите отправку данных на сервер.
Вот функция для серверной стороны, которая слушает и запускает поток
def start_server(self):
host = host_1
port = port_1 # arbitrary non-privileged port
max_buffer_size = 16000
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # SO_REUSEADDR flag tells the kernel to reuse a local socket in TIME_WAIT state, without waiting for its natural timeout to expire
print("Socket created")
try:
soc.bind((host, port))
except:
print("Bind failed. Error : " + str(sys.exc_info()))
sys.exit()
soc.listen(100) # queue up to 100 requests
print("Socket now listening")
# infinite loop- do not reset for every requests
while True:
global connection
connection, address = soc.accept()
ip, port = str(address[0]), str(address[1])
print("Connected with " + ip + ":" + port)
try:
Thread(target=Myobj.client_thread, args=(connection, ip, port,max_buffer_size)).start()
except:
print("Thread did not start.")
traceback.print_exc()
soc.close()
Вот функция на стороне клиента, которая вызывается циклом for на каждой итерации для отправки данных на сервер
def send_server(table_rows):
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientSocket.settimeout(5)
connected = False
host_1 = host
port_1 = port
initial_ip = 1
if initial_ip == 1:
print("value of previous initial ip = "+str(initial_ip))
host = host_1
port = port_1
initial_ip =
try:
clientSocket.connect( ( host, port ) )
print("Connected to server")
connected = True
except (socket.error) as serr:
.................
connected == False
print("Value of connected = "+str(connected))
if connected == True:
try:
data = pickle.dumps(sock_list,protocol=2)
clientSocket.send((data))
print("Data sent to server")
return 0
except (socket.error, serial.SerialException) as serr:
#raise serr
else:
print("Server connection failed!")
clientSocket.close();
sys.stdout.flush()