2016-10-20 2 views
0

Я использую Pyro4 для обеспечения удаленного соединения между малиной и компьютером. Я тестировал код локально на своем компьютере. Но теперь я хочу использовать его на малине. Только проблема, на которую машина отказала. Nameserver установлен, я могу запросить метаданные, клиент не дает никаких ошибок.Pyro4 Удаленное подключение заблокировано

Серверный код:

daemon = Pyro4.core.Daemon("192.168.0.199") 
Pyro4.config.HOST = "192.168.0.199" 
ns = Pyro4.locateNS() 
print ns.lookup("client", return_metadata=True) #this works 
callback = MainController() 
daemon.register(callback) 
vc2 = Pyro4.core.Proxy("PYRONAME:[email protected]:12345") 

код клиента:

ns = Pyro4.locateNS() 
Pyro4.config.HOST = "192.168.0.199" 
uri = daemon.register(VehicleController) 
ns.register("[email protected]:12345", uri) 
print "Connection set!" 
daemon.requestLoop() 

Firewall тоже выключен.

Благодаря

+0

Все тот же IP. Это верно? –

+0

@KlausD. Это IP-адрес сервера имен. Наверное, это правильно, не так ли? – Tom

ответ

1

Основная проблема заключается в том, что сервер никогда не запускает цикл запроса демона, и поэтому не может отвечать на запросы.

Но есть много вопросов, с кодом, как показано ниже:

  • это не является полным.
  • вы смешиваете обязанности сервера и клиента; почему клиент работает с deamon? Это работа сервера.
  • Вы регистрируете объект с логическим именем, которое представляется физическим. Это не работает сервер имен.
  • вы регистрируетесь как на клиенте, так и на сервере.
  • сервер никогда не запускает цикл запросов создаваемого им демона.
  • Что это за прокси-сервер «vc2» на сервере? Клиенты должны создавать прокси-серверы для объектов сервера.
  • Обычно лучше установить переменные конфигурации Pyro, прежде чем делать что-либо еще, так что вам не нужно повторять себя с IP-адресом, на который привязан демон.

В целом вы, кажется, путаетесь с различными основными понятиями Пиро. Как лучше понять (проработали ли вы в главе руководства руководства?) И исправление кода, скорее всего, решит вашу проблему.

+0

Спасибо, что ответишь. Я смешиваю сервер и клиент, потому что я использую функцию обратного вызова (ссылки на пример обратного вызова в вашем github). – Tom

+0

Я снова посмотрю на руководство, но весь код работает, когда я запускаю его локально. Спасибо – Tom

0

Хорошо, есть еще некоторая информация

Я могу подключиться, когда я изменить мой Pyro4 сердечника URL из obj_ х @ 0.0.0.0: х до obj_ х @ 192.168.0.199: х и подключение вручную. Поэтому я предполагаю, что что-то не так с тем, как я регистрирую адрес в сервере имен.

Я буду держать вас в курсе

Том

+0

Если ваш демон привязан к 0.0.0.0, и вы регистрируете объекты в этом deamon с сервером имен, вы можете столкнуться с проблемами. Клиенты будут получать 0.0.0.0 в качестве адреса от сервера имен, и это, скорее всего, не адрес вашего реального сервера. Вам придется изменить адрес, на который привязан демона. См. Https://pythonhosted.org/Pyro4/servercode.HTML # сетевой адаптер-связывающий и-локальный –

Смежные вопросы