#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;