Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12

Подключение к сокету, прослушивающему не 127.0.0.1

21.01.2014, 19:14. Показов 3000. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <stdio.h>
#include <winsock2.h> // Wincosk2.h должен быть раньше windows!
#include <windows.h>
 
#define MY_PORT 6666 // Порт, который слушает сервер 666
 
// макрос для печати количества активных пользователей
#define PRINTNUSERS if (nclients) printf("%d user on-line\n", nclients); \
        else printf("No User on line\n");
 
// прототип функции, обслуживающий подключившихся пользователей
DWORD WINAPI SexToClient(LPVOID client_socket);
 
// глобальная переменная - количество активных пользователей
int nclients = 0;
 
int main(int argc, char* argv[])
{
    char buff[1024]; // Буфер для различных нужд
 
    printf("TCP SERVER DEMO\n");
    // Шаг 1 - Инициализация Библиотеки Сокетов
    // т.к. возвращенная функцией информация не используется
    // ей передается указатель на рабочий буфер, преобразуемый к указателю
    // на структуру WSADATA.
    // Такой прием позволяет сэкономить одну переменную, однако, буфер
    // должен быть не менее полкилобайта размером (структура WSADATA
    // занимает 400 байт)
    if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {
        // Ошибка!
        printf("Error WSAStartup %d\n", WSAGetLastError());
        return -1;
    }
 
    // Шаг 2 - создание сокета
    SOCKET mysocket;
    // AF_INET - сокет Интернета
    // SOCK_STREAM - потоковый сокет (с установкой соединения)
    // 0 - по умолчанию выбирается TCP протокол
    if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        // Ошибка!
        printf("Error socket %d\n", WSAGetLastError());
        WSACleanup(); // Деиницилизация библиотеки Winsock
        return -1;
    }
 
    // Шаг 3 - связывание сокета с локальным адресом
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT); // не забываем о сетевом порядке!!!
    local_addr.sin_addr.s_addr = 0; // сервер принимает подключения
                                    // на все свои IP-адреса
 
    // вызываем bind для связывания
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {
        // Ошибка
        printf("Error bind %d\n", WSAGetLastError());
        closesocket(mysocket); // закрываем сокет!
        WSACleanup();
        return -1;
    }
 
    // Шаг 4 - ожидание подключений
    // размер очереди - 0x100
    if (listen(mysocket, 0x100))
    {
        // Ошибка
        printf("Error listen %d\n", WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }
 
    printf("Ожидание подключений...\n");
 
    // Шаг 5 - извлекаем сообщение из очереди
    SOCKET client_socket; // сокет для клиента
    sockaddr_in client_addr; // адрес клиента (заполняется системой)
 
    // функции accept необходимо передать размер структуры
    int client_addr_size = sizeof(client_addr);
 
    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \
           &client_addr_size)))
    {
        nclients++; // увеличиваем счетчик подключившихся клиентов
 
        // пытаемся получить имя хоста
        HOSTENT *hst;
        hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);
 
        // вывод сведений о клиенте
        printf("+%s [%s] new connect!\n",
        (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr));
        PRINTNUSERS
 
        // Вызов нового потока для обслужвания клиента
        // Да, для этого рекомендуется использовать _beginthreadex
        // но, поскольку никаких вызовов функций стандартной Си библиотеки
        // поток не делает, можно обойтись и CreateThread
        DWORD thID;
        CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID);
    }
    return 0;
}
 
// Эта функция создается в отдельном потоке
// и обсуживает очередного подключившегося клиента независимо от остальных
DWORD WINAPI SexToClient(LPVOID client_socket)
{
    SOCKET my_sock;
    my_sock = ((SOCKET *)client_socket)[0];
    char buff[20 * 1024];
    #define sHELLO "Hello, Sailor\r\n"
 
    // отправляем клиенту приветствие
    send(my_sock, sHELLO, sizeof(sHELLO), 0);
 
    // цикл эхо-сервера: прием строки от клиента и возвращение ее клиенту
    int bytes_recv;
    while ((bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) &&
    bytes_recv != SOCKET_ERROR)
    send(my_sock, &buff[0], bytes_recv, 0);
 
    // если мы здесь, то произошел выход из цикла по причине
    // возращения функцией recv ошибки - соединение с клиентом разорвано
    nclients--; // уменьшаем счетчик активных клиентов
    printf("-disconnect\n"); PRINTNUSERS
 
    // закрываем сокет
    closesocket(my_sock);
    return 0;
}
при попытке конектится к нему по внешнему ip вылетает ошибка 10061
что делать?

Добавлено через 4 минуты
сервер не привязывает сокет к моему внешнему ip который я получаю при поиски в гугле " мой ip"

Добавлено через 18 секунд
как получить ip к которому привязался сокет?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2014, 19:14
Ответы с готовыми решениями:

Подключение к несуществующему сокету
Написал простенький сервер-клиент. В локальной сети работает на ура, но при тесте с айпи друга вышла интересная вещь: ко мне он...

Как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть 11111111
Добрый вечер! ломаю голову над тем, как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть...

Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 127.0.0.1:11000
Клиент-серверное приложение на tcp/ip Все работало на win xp(порты 11000 и 11001), но на win7 не стартует. Итак: 1. Фаейрволл...

5
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
22.01.2014, 19:24
я, конечно, извиняюсь за столь банальный вопрос, но вы УВЕРЕНЫ, что ваш компьютер получает именно РЕАЛЬНЫЙ адрес? И по пути от вашего компьютера в Интернет нет какого-нибудь домашнего роутера, например?
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
22.01.2014, 21:10  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
я, конечно, извиняюсь за столь банальный вопрос, но вы УВЕРЕНЫ, что ваш компьютер получает именно РЕАЛЬНЫЙ адрес? И по пути от вашего компьютера в Интернет нет какого-нибудь домашнего роутера, например?
не уверен. скорей всего роутер есть)
спасибо, теперь понятно всё)
0
 Аватар для Bend3r
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
22.01.2014, 21:11
Чтобы реализовать то что вы хотите, вам необходимо приобрести у вашего провайдера выделенный ip адрес.
Либо организуйте локалку. Как вариант заказать у хостингов, VPS-Windows и запустить ваш сервер там.(Тестовый режим многие дают, как раз для ваших тестов)
2
 Аватар для UriahHeep
224 / 219 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
22.01.2014, 23:09
Лучший ответ Сообщение было отмечено как решение

Решение

Если есть роутер между компьютером и интернетом, то интернет-адрес имеет роутер.

Такой адрес может быть нескольких видов:

* публичный статический адрес -- это значит что адрес закреплён за вами и не будет изменяться и что по этому адресу можно подключаться к вам;

* публичный динамический адрес. Выделяется из пула провайдера. Может меняться при каждом новом подключении или при новом подключении по истечению заданного времени;

* серый статический. Такой адрес закреплён за вами, но вы находитесь во внутренней сети провайдера (часто реализуется через pptp, хотя и другие варианты адресов тоже). Это значит, что подключиться снаружи к вам не получится без принятия определённых мер (но разговор не об этом);

* серый динамический. Здесь вы находитесь за сервером провайдера и адрес может меняться по разным причинам.

Чтобы реализовать подключение из интернета к вашему серверу нужно знать тип вашего адреса. Предположим, для простоты, что первый -- публичный статический. В этом случае на роутере нужно сделать проброс порта 6666 с внешнего адреса (это вышеобсуждаемый адрес) на адрес вашего компьютера в сети.
3
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
24.01.2014, 18:34
Ну так на роутере-то можно DNAT настроить на хост в локалке.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2014, 18:34
Помогаю со студенческими работами здесь

подключение к сокету сервера
private void SetupServerSocket() { // Получаем информацию о локальном компьютере IPHostEntry localMachineInfo = ...

Почему подключение к сокету не происходит?
кусок кода создает сокет по определенному пути должен туда записать определенные данные,которые в последствии будут эмулировать устройство...

Подключение к 127.0.0.1
Доброй ночи. Написал сервер и клиент чата, по протоколу TCP сбилдил, запускаю сервер, и когда питаюсь подключитса к самому себе...

Подойдут ли вентиляторы от сокету 1150 к сокету 1151
Хочу собирать компьютер на сокете 1151 , но не вижу вентиляторов к такому процессору , подойдут ли вентиляторы к сокету 1150. И ещё вопрос...

Как 127.0.0.1/index.phtml сделать 127.0.0.1?
Здравствуйте, установила апач и пхп на линукс все работает, но что-то не настроено, объясните пожалуйста как сделать чтобы при наборе...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru