Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423

Клиент сервер не работает через интернет

02.07.2016, 10:59. Показов 1710. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю сетевую консольную игрушку для курсача, если подключатся через 127.0.0.1 или через локальный ip то все работает, но когда пытаюсь связать клиент сервер через ip инета(типа 84.242.206.234) то клиент не подключается, чяднт?
Сервер:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            
int sock, n, port = def_port;
        int;
        struct sockaddr_in servaddr;
    
        sock = socket(AF_INET, SOCK_STREAM, 0);
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(port);
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        
        bind(sock, (struct sockaddr *) &servaddr, sizeof(servaddr));
        printf("Порт: %d ожидаю подключения\n", ntohs(servaddr.sin_port));
        listen(sock, 0);
        int tmp = sock;
        sock = accept(sock, (struct sockaddr *) NULL, NULL);
Клиент:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    int sock, n, port = def_port;
    
        struct sockaddr_in servaddr;
    sock = socket(AF_INET, SOCK_STREAM, 0);
    
    char ip[100];
    printf("Введите ip адрес: ");
    scanf("%s", ip);
        
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(port);
    
    if(inet_aton(ip, &servaddr.sin_addr) == 0){
            printf("Неправильный ip адрес\n");
        return;
    }
    
        if(connect(sock, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
            printf("Не удалось подключиться\n");
        return;
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2016, 10:59
Ответы с готовыми решениями:

Сервер-клиент не работает через интернет
Есть готовые сервер клиент приложения в локальной сети работают на ура а если пытаться подключиться через интернет к компьютеру не в моей...

Как можно создать клиент-сервер TCP, который работает через интернет?
Ребята , как можно создать клиент-сервер TCP , который работает через интернет? Ну к примеру есть два ПК с интернетом, на одном программа...

Клиент - сервер через интернет
Доброго времени суток... Не подскажете как реализовать клиент-сервер что бы он работал не в локалке а в интернете... Естественно сервак...

5
 Аватар для Emmk
76 / 76 / 30
Регистрация: 12.02.2016
Сообщений: 199
02.07.2016, 11:28
IP то белый?
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
02.07.2016, 11:32  [ТС]
Emmk, Да вроде белый, не меняется и хостом занимался.
0
Почетный модератор
 Аватар для Humanoid
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
02.07.2016, 11:45
Лучший ответ Сообщение было отмечено serega006 как решение

Решение

Рекомендую проверять возвращаемые значения функций. В частности, вы вызываете bind() и linsten(), но не проверяете возвращаемое значение. Возможно, по какой-то причине не удалось открыть порт. Кстати, в Линуксе обычный пользователь может слушать порты только начиная с 1024 и выше. Для меньших номеров нужны дополнительные права. В общем, когда увидите ошибку, то, скорее всего, будет сразу понятна её причина. И рекомендую к printf добавлять %m, что бы увидеть описание ошибки.
C
1
2
3
4
if (bind(...) == -1) {
    printf("Не удалось выполнить bind() : %m\n");
    return;
}
Кстати, я не уверен, что в listen() можно указать второй аргумент нулём. Ведь, это количество подключений, которые могут быть в очереди перед тем, как их примут. В описании ничего про 0 не нашёл, но лично я поставил бы туда какое-нибудь ненулевое значение.
2
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
02.07.2016, 12:39  [ТС]
Спасибо, все оказалось куда проще, я , по своей тупости, просто забыл открыть порт на роутере

Добавлено через 27 минут
Дабы не создавать новых тем хотел бы еще спросить про такую маленькую проблемку:
C
1
2
3
4
5
6
7
8
9
while(1){
                    scanf("%d %d", &point[0], &point[1]);
                    if(point[0] >= 10 || point[1] >= 10 || point[0] < 0 || point[1] < 0)
                        printf("Неправильные координаты, попробуйте еще раз\n");
                    else if(client->hit[point[0]][point[1]] == 2 || client->hit[point[0]][point[1]] == 1)
                        printf("Клетка уже стреляна, попробуйте еще раз\n");
                    else
                        break;
                }
Если ввести английские буквы вместо чисел(например f y) начнется бесконечный вывод "Неправильные координаты, попробуйте еще раз" или второго предложения не давая ввести данные снова.
0
 Аватар для shepherd
25 / 25 / 26
Регистрация: 22.03.2016
Сообщений: 77
08.07.2016, 08:25
Лучший ответ Сообщение было отмечено serega006 как решение

Решение

Цитата Сообщение от serega006 Посмотреть сообщение
Если ввести английские буквы вместо чисел(например f y) начнется бесконечный вывод "Неправильные координаты, попробуйте еще раз" или второго предложения не давая ввести данные снова.
Обнулите переменные в начале цикла, перед scanf.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.07.2016, 08:25
Помогаю со студенческими работами здесь

Клиент-Сервер через интернет
Добрый день. Пишу программу которая должна работать через интернет. Есть клиентская версия и серверная. На сервере хранится БД...

Клиент-Сервер через интернет
Собственно проблема довольно распространённая - Между ПК и интернетом стоит роутер - Серверное приложение на ПК открывает порт -...

Клиент и сервер не взаимодействуют через интернет
Всем привет.... Начал осваивать сокеты сделал, сервер и клиент, почему на компе эти две программки договариваются, а в инете нет? ...

Чат клиент сервер через интернет
в общем, решила написать простой чат, в настоящий момент только клиент может отправлять сообщения серверу, вот собственно код: package...

TCP клиент-сервер через интернет
Ситуация такая: Есть два компа. На одном сервер на другом клиент. Все реализована на TcpListener/TcpClient. Клиент передает на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru