Как отправлять целые числа с клиента на сервер.Python socket
Кто шарит в клиент-сервере на python,библиотека socket помогите решить задачу пожалуйста.
СЕРВЕР ЗАДАЧА:
- Создайте сервер, который получает число, умножает его на 10 и отправляет обратно клиенту.
- При получении команды «stop», сервер должен быть остановлен (в примере из урока это можно сделать, завершив бесконечный цикл с помощью break).
КЛИЕНТ ЗАДАЧА:
- Создайте клиента, который отправляет серверу из предыдущего упражнения число 5, затем ещё число 10 и затем команду «stop».
- Убедитесь, что всё работает правильно, то есть сервер после первой команды должен прислать «50», после второй – «100», а после команды «stop» должен быть остановлен (то есть программа из предыдущего упражнения должна остановиться).
КОД СЕРВЕРА
import socket
SERVER_ADDRESS = ('', 15253)
server = socket.socket()
server.bind(SERVER_ADDRESS)
server.listen(1)
print("Ждём подключения клиента...")
while True:
c, a = server.accept()
data = c.recv(4096)
b = data.decode("UTF-8")
print("Получили от клиента:", b)
if b == 'stop':
print("Заверешение")
break
data = data * 10
c.send(data)
c.close()
КОД КЛИЕНТА
import socket
SERVER_ADDRESS = ('localhost', 15253)
client = socket.socket()
client.connect(SERVER_ADDRESS)
client.send(bytes("5", encoding="UTF-8"))
data = client.recv(4096)
print(data.decode("UTF-8"))
Проблема в том что я не знаю как конвертировать строку в число именно в этой теме т.к. там чтение идёт в байтах. При запуске клиент-сервера возвращается 10 пятёрок С командой "stop" всё получилось .
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Ваш сервер проще исправить так:
break
data=bytes(str(int(data) *10), "ascii" )
c.send(data)
Но я бы рекомендовал использовать какой-то протокол для передачи для более сложных задачек. Например, реализовать TLV:
сервер
INT=1
STOPSERVER=2
END=3
accepting = True
while accepting:
c, a = server.accept()
while True:
data = c.recv(2)
type, length = data
if length:
data = c.recv(length)
if type == END:
break
if type == STOPSERVER:
accepting = False
break
if type == INT:
data = int.from_bytes(data,"big")
data *= 10
c.send(bytes[INT,4])
c.send(data.to_bytes(4,'big'))
c.close()
клиент
client.send(bytes[INT,4])
client.send((5).to_bytes(4,'big'))
client.send(bytes[END,0])