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

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

02.07.2016, 10:59. Показов 1744. Ответов 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
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru