Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
1

трабл с Белый IP

26.04.2016, 07:56. Показов 537. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здрасьте.

Работаю с WINSOCKET, по локалке подключаюсь идеально.

Сервер
Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
 
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "mswsock.lib")
 
int main() 
{
    char PCName[30], ClientName[30], Message[200];
    WSAData WSADat; // Свойства WinSock (результат функции WSAStartup)
    sockaddr_in sin; // Свойства(адрес) создаваемого сокета
    SOCKET Sock, Client; // Серверный и клиентский сокеты
 
    WSAStartup(0x0202, &WSADat); // Инициализация WinSock
                                 // 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2
                                 // WSADat - структура, куда будут занесены рез. инициализации
    gethostname(PCName, 30); // Получение имени текущего ПК
 
    sin.sin_family = AF_INET; // Тип адреса
    sin.sin_addr.s_addr = 0;  // IP-адрес сервера (пори создании сервера можно 0)
    sin.sin_port = htons(2803); // Номер порта сервера
    Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Создание сокета
    bind(Sock, (sockaddr*)&sin, sizeof(sin)); // Связывание созданного сокета с адресом sin
 
                                              // ***** Ожиданеи клиента
    printf("Wait of client...\n");
 
    listen(Sock, SOMAXCONN); // Прослушивание сокета сервером (для подключения клиента)
    Client = accept(Sock, (sockaddr*)&sin, 0); // Ожидание клиента
    recv(Client, ClientName, 30, 0); // Получение имени компьютера клиента
    send(Client, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (сервера)
 
    printf("Client ( "%s" ) has connected!\n", ClientName);
 
    // ***** Меню
    int Menu;
    do {
        printf("1. Send message;\n");
        printf("2. Get Message;\n");
        printf("3. Quit;\n");
 
        printf("Make your selection: ");
        scanf_s("%i", &Menu);
 
        switch (Menu) {
        case 1:
            // Отправка сообщения клиенту
            printf("Enter message: ");
            scanf_s("%199s", Message, 200);
            if (send(Client, Message, strlen(Message) + 1, 0) != SOCKET_ERROR)printf("Sent!\n");
            else printf("Error of sending!\n");
            break;
        case 2:
            // Приём сообщения от клиента
            if (recv(Client, Message, 200, 0) != SOCKET_ERROR) {
                printf("%s\n", Message);
                _gettch();
            }
            else printf("Error of getting!\n");
            break;
        };
 
        printf("\n");
    } while (Menu != 3);
 
    // Закрытие сокетов и окончание работы с WinSock
    closesocket(Sock);
    closesocket(Client);
    WSACleanup();
    
    system("pause");
    return 0;
}


Клиент
Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
 
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "mswsock.lib")
 
int main() 
{
    char PCName[30], ServerName[30], Message[200], IP[16] = { 0 };
    WSAData WSADat; // Свойства WinSock (результат функции WSAStartup)
    sockaddr_in sin; // Свойства(адрес) создаваемого сокета
    SOCKET Sock; // Клиентский сокет
 
                 // Ввод IP-адреса сервера
    printf("Enter server's IP: ");
    scanf_s("%15s", IP, 16);
 
    WSAStartup(0x0202, &WSADat); // Инициализация WinSock
                                 // 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2
                                 // WSADat - структура, куда будут занесены рез. инициализации
    gethostname(PCName, 30); // Получение имени текущего ПК
 
    sin.sin_family = AF_INET; // Тип адреса
    sin.sin_addr.s_addr = inet_addr(IP); // IP-адрес сервера (пори создании сервера можно 0)
    sin.sin_port = htons(2803); // Номер порта сервера
 
    Sock = socket(AF_INET, SOCK_STREAM, 0); // Создание сокета
 
                                            // ***** Подключение к серверу
    printf("Connecting to server...\n");
 
    if (connect(Sock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) {
        printf("Connection error!\n");
        system("pause");
    }
    send(Sock, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (клиента)
    recv(Sock, ServerName, 30, 0); // Получение имени компьютера сервера
 
    printf("Connected to "%s"!\n", ServerName);
 
    // ***** Меню
    int Menu;
    do {
        printf("1. Send message;\n");
        printf("2. Get Message;\n");
        printf("3. Quit;\n");
 
        printf("Make your selection: ");
        scanf_s("%i", &Menu);
 
        switch (Menu) {
        case 1:
            // Отправка сообщения серверу
            printf("Enter message: ");
            scanf_s("%199s", Message, 200);
            if (send(Sock, Message, strlen(Message) + 1, 0) != SOCKET_ERROR) printf("Sent!\n");
            else printf("Error of sending!\n");
            break;
        case 2:
            // Приём сообщения от сервера
            if (recv(Sock, Message, 200, 0) != SOCKET_ERROR) {
                printf("%s\n", Message);
                _gettch();
            }
            else printf("Error of getting!\n");
            break;
        };
 
        printf("\n");
    } while (Menu != 3);
 
End:
 
    // Закрытие сокетов и окончание работы с WinSock
    closesocket(Sock);
    WSACleanup();
    
    system("pause");
    return 0;
}


Мне надо, чтобы ко мне могли подключиться по Интернету. У меня был серый динамический IP. Позвонил провайдеру, сказал что бы дали Белый IP. Сделали мне они статический(постоянный) IP. Зашёл на 2ip, адрес действительно постоянный.
Тут я решил попробовать подключится с другого устройства по Интернету, взял свой IP с сайта 2ip, ввожу - не получилось, попросил друга - не получилось.
Позвонил на след. день, спросил у другого оператора, он подтвердил про Белый IP. Я подумал ну и хорошо. Но опять ничего не вышло, не коннектится к серверу.

И вопрос, как можно проверить, реально ли у меня Белый IP ? Если нет, то что мне делать с моим провайдером ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2016, 07:56
Ответы с готовыми решениями:

Трабл!!!
У меня проблема... По какойто причине несоздается .exe файл...Среда програмирования visual 2008 ...

Трабл с TP
В школе Turbo Pascal никогда не изучали, а в универе с первых дней задают задачи. Если вам не...

Трабл с If'ом
Вот это почему-то не фунциклит: } else if (command == okCommand1) { String st =...

Трабл
Программа, если не ошибаюсь, написана нормально, но если проверить правильность выполнения на...

7
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28045 / 15778 / 982
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
26.04.2016, 08:07 2
комп напрямую подключен или через роутер?
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
26.04.2016, 08:10  [ТС] 3
роутер
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.04.2016, 11:21 4
Пробросте порт с роутера на вашу машину
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
26.04.2016, 20:30  [ТС] 5
Перебросил, долго разбирался, теперь могу спокойно подключаться через мой IP (2ip).
Только вот не понятки с моей локальной машиной(сервер теперь).
Локальный адрес моего сервера заканчивался на 2. Теперь он заканчивается на 3.
С чем это может быть связано ?
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
27.04.2016, 09:48 6
Цитата Сообщение от BeginerMan Посмотреть сообщение
С чем это может быть связано ?
это может быть связано с тем что этот адрес динамически выдается вашим роутером - просто пришло время и он выдал вам новый адрес
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
27.04.2016, 17:25  [ТС] 7
Сегодня он опять поменялся, получается мне надо будешь каждый раз следить за этим ? Или есть вариант, как сделать чтобы не менялся локальный адрес машины ?
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
27.04.2016, 19:20 8
BeginerMan, роутер может закрепить конкретный адрес за конкретной машиной только как это относится к вопросу не ясно - это ведь локальный адрес для внешних клиентов есть внешний который вы настроили
0
27.04.2016, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2016, 19:20
Помогаю со студенческими работами здесь

WI-FI трабл!
Доброго времени сутак всем! Вообщем попытаюсь в крации описать ситуацию и надеюсь на вашу помощь!...

Трабл
Ребят, тут такое дело...сайт не открывается. 404й нету , вообще не грузится ничего. БД работает,...

трабл с VC++ 6
При компиляции виснет в 50% случаев, непонимаю даже почему, надо завершать MSDEV.EXE через...

Трабл с кавычками
Всем привет ! Такая ситуация: пусть у нас есть вот такая форма &lt;form name=&quot;TEST&quot; method=&quot;post&quot;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru