Клиент/сервер Python

Santiago105

Опытный
Дней с нами
1.650
Розыгрыши
0
Сообщения
236
Репутация
4
Реакции
120
В общем суть вопроса. Мне нужно что-то у меня все обрабатывалось на моем компьютере(соответственно это сервер), после этого отправлялись клиенту(в моем случае это ev3 с прошивкой ev3dev на линуксе(дебиан), клиент принимает данные и уже решает что с ними делать и все это должно происходить в режиме реального времени и постоянно, нашел в интернете что-то связанное с этим, это rpyc, по описанию он примерно подходит под то что я хочу реализовать, так вот вопрос, подойдет ли этот rpyc для моих нужд? Или есть что-то еще намного проще?
 
а через socket почему не сделать?
https://habr.com/ru/post/149077/ и проще и быстрей
Да я уже до шел до сокетов) Попробовал только на своем компьютере с этими же файлами, все работает, все окей, но как только я подключил на устройстве ничего естественно не сработало, потому что никакого localhosta нету, вот сижу думаю какой айпи куда вставлять вообще чтобы оно было связано
 
Пропингуй. Сделай aiohttp POST/GET сервер и клиент на том же aiohttp к примеру, какие проблемы? Если не понимаешь как работает асинк - юзай httpx, документация везде понятная и написана на человеческом английском.
 
Да я уже до шел до сокетов) Попробовал только на своем компьютере с этими же файлами, все работает, все окей, но как только я подключил на устройстве ничего естественно не сработало, потому что никакого localhosta нету, вот сижу думаю какой айпи куда вставлять вообще чтобы оно было связано
на сервере sock.bind(('', port))
на клиенте sock.bind(('ip pc', port))
ип на пк можно узнать через консоль командой ipconfig
(вида 192.168.*.*) его и указываешь на клиенте
 
Последнее редактирование:
на сервере sock.bind(('', port))
на клиенте sock.bind(('ip pc', port))
ип на пк можно узнать через консоль командой ipconfig
(вида 192.168.*.*) его и указываешь на клиенте
OuKnclA.png

Да, все окей) Просто это все в локальной сети было, я же все айпишники перепутал. Такой еще вопрос интересует если я в цикле сделаю постоянный запрос каких-то данных ничего не будет или как это лучше реализовать? У меня есть кинект, который постоянно опрашивает датчик получает координаты x y z после этого я их обрабатываю на сервере и делаю допустим если x>0 то загорается лампочка, как мне лучше передать вот это "загорается лампочка" чтобы она действительно загорелась, делать переменную и потом на клиенте вызывать эту переменную? Извините за, может, некорректные вопросы, я просто начал изучать питон только недавно, а задачи уже большого уровня.
И еще иногда когда запускаю сервер пишет что "Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)" можно ли это как-то исправить? А то постоянно новый порт использовать не вариант
 
Последнее редактирование:
OuKnclA.png

Да, все окей) Просто это все в локальной сети было, я же все айпишники перепутал. Такой еще вопрос интересует если я в цикле сделаю постоянный запрос каких-то данных ничего не будет или как это лучше реализовать? У меня есть кинект, который постоянно опрашивает датчик получает координаты x y z после этого я их обрабатываю на сервере и делаю допустим если x>0 то загорается лампочка, как мне лучше передать вот это "загорается лампочка" чтобы она действительно загорелась, делать переменную и потом на клиенте вызывать эту переменную? Извините за, может, некорректные вопросы, я просто начал изучать питон только недавно, а задачи уже большого уровня
делаешь проверку на текст запроса после того, как сделал .decode('utf-8') со строкой. Лучше всего конечно так не делать, а решить эту проблему при помощи json: {'type': 'light', 'status': 'on'}.
 
делаешь проверку на текст запроса после того, как сделал .decode('utf-8') со строкой. Лучше всего конечно так не делать, а решить эту проблему при помощи json: {'type': 'light', 'status': 'on'}.
Оно автоматически кодируется в utf8(# -*- coding: utf-8 -*-), почитал про этот json, так и не понял каким образом он мне тут может пригодится. У меня есть 2 цикла в котором постоянно идет опрос датчиков, есть постоянные значения x y z в зависимости от которых должен работать определенный мотор. соответственно в коде выглядит примерно так:
if y > 0:
Leds.set_color(Leds.LEFT, Leds.GREEN)
elif y < 0 :
Leds.set_color(Leds.RIGHT, Leds.RED)
В данном случае я беру только одну руку и мне нужно чтобы вот этот leds попал на блок управления и выполнил это, каким образом что я должен запрашивать?
 
Оно автоматически кодируется в utf8(# -*- coding: utf-8 -*-), почитал про этот json, так и не понял каким образом он мне тут может пригодится. У меня есть 2 цикла в котором постоянно идет опрос датчиков, есть постоянные значения x y z в зависимости от которых должен работать определенный мотор. соответственно в коде выглядит примерно так:
if y > 0:
Leds.set_color(Leds.LEFT, Leds.GREEN)
elif y < 0 :
Leds.set_color(Leds.RIGHT, Leds.RED)
В данном случае я беру только одну руку и мне нужно чтобы вот этот leds попал на блок управления и выполнил это, каким образом что я должен запрашивать?
Можно сделать так совсем по другому. Поставив на управляемый блок сервер aiohttp, и сделать там получение json массива.
{'motor': 1, 'command': 'setpos', data: {'x': 1, 'y': 2}}
Соответственно можно просто будет делать проверки не в бесконечном цикле, а просто ожидать требуемой команды.
Проверку делаешь так например:
incoming_data = {'motor': 1, 'command': 'setpos', data: {'x': 1, 'y': 2, 'z': 3}}
if incoming_data['command'] == 'setpos':
# устанавливаем позицию мотора
x = incoming_data['data']['x']
y = incoming_data['data']['y']
z = incoming_data['data']['z']
motor_id = incoming_data['motor']
else:
print('undefined')
 
Можно сделать так совсем по другому. Поставив на управляемый блок сервер aiohttp, и сделать там получение json массива.
{'motor': 1, 'command': 'setpos', data: {'x': 1, 'y': 2}}
Соответственно можно просто будет делать проверки не в бесконечном цикле, а просто ожидать требуемой команды.
Проверку делаешь так например:
incoming_data = {'motor': 1, 'command': 'setpos', data: {'x': 1, 'y': 2, 'z': 3}}
if incoming_data['command'] == 'setpos':
# устанавливаем позицию мотора
x = incoming_data['data']['x']
y = incoming_data['data']['y']
z = incoming_data['data']['z']
motor_id = incoming_data['motor']
else:
print('undefined')
Спасибо, в дальнейшем можно будет это реализовать, просто сейчас нужно будет тратить время на то чтобы во всем это разобраться, а времени нету, сейчас самое главное чтобы просто обрабатывал компьютер все и отправлял нужные команды на блок управления моторами
 
Спасибо, в дальнейшем можно будет это реализовать, просто сейчас нужно будет тратить время на то чтобы во всем это разобраться, а времени нету, сейчас самое главное чтобы просто обрабатывал компьютер все и отправлял нужные команды на блок управления моторами
Кстати, если вопросы будут, сорян за долгий ответ - пиши tg @Inzilkin