Как я могу связать сервер C websocket, работающий на AWS Linux, с клиентом на виртуальной машине локально?

#linux #amazon-web-services #sockets #ubuntu #amazon-ec2

#linux #amazon-web-services #сокеты #ubuntu #amazon-ec2

Вопрос:

Недавно я написал программу echoserver / echoclient на C для онлайн-курса, который я посещаю (Выпускное введение в операционные системы, здесь). Я смог завершить это с помощью (и модификации из сетевого руководства Beej (здесь). Я могу отлично запустить его на своей виртуальной машине Ubuntu 20.04, работающей на моем ноутбуке с Windows 10. Тем не менее, я пытаюсь запустить echoserver на экземпляре AWS Linux и echoclient с виртуальной машины Ubuntu, поскольку моя конечная цель — создать клиентскую программу, которая имеет хранилище данных центрального сервера. Однако я сталкиваюсь с проблемами, когда я запускаю код echoserver C на экземпляре AWS EC2 через SSH-ing с помощью PuTTY, затем я запускаю echoclient на виртуальной машине Ubuntu, но он не может подключиться (ошибка, которую я получаю на стороне клиента, заключается в том, что он не прошел connect фазу вызова сокета). Я попробовал следующие шаги:

  • Редактирование входящих правил конфигурации безопасности экземпляра EC2, чтобы разрешить «Все TCP» соединения с IP-адреса, который появляется при запуске curl ifconfig.me на моем компьютере с Ubuntu
  • Изменение сетевых настроек моей виртуальной машины Ubuntu с NAT на мостовую сеть
  • Тестирование доступа к порту с помощью telnet <AWS Public IP> <PortNo> — что привело к ошибке «Отказано в подключении»
  • Убедитесь, что мои исходящие порты не заблокированы, следуя этим инструкциям

Я просмотрел страницы AWS (здесь), а также несколько потоков developer / SO (лучший, который я нашел на данный момент здесь), и я просто не могу разобраться. Если кто-нибудь может мне помочь, я был бы очень признателен. Я буду рад опубликовать свой серверный и клиентский код, если это поможет.

Ответ №1:

Разобрался: на моем сервере отсутствовала следующая строка кода.

hints.ai_flags = AI_PASSIVE;