С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для АИЕ
4 / 4 / 0
Регистрация: 28.09.2015
Сообщений: 281

Реализовать ограничения в программе через ее серверную часть

27.03.2016, 10:14. Показов 1251. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, всем!

Подскажите, как можно реализовать следующее:

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

Добавлено через 3 часа 47 минут
Подскажите хоть что-нибудь.

Добавлено через 10 часов 56 минут
Уточнение:

Нужно в свою основную программу добавить окно, в которой будет поле для ввода ключа, каптча и кнопка, при нажатии на которую происходила бы отправка ключа на серверную часть программы (которая стоит на арендованном удалённом сервере). А сама серверная часть программы состояла бы из окна с тремя полями (ключ, срок действия, максимальное количество подключений) и кнопка сохранения данных. Если ключ действителен и срок действия не истёк, а так же уже подключений не больше нужно, то давать добро на вход в программу пользователю.

Помогите пожалуйста, а то вообще не сталкивался ещё с такими задачами.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2016, 10:14
Ответы с готовыми решениями:

Создать через ADO клиентскую и серверную часть в программе
как создать через ADO клиентскую и серверную часть в программе?

Как реализовать серверную часть голосовалки?
Задача такова: Главная- две фото, выходят рандомно из директории. И под ними опрос, варианта всего два. Нужно сделать : Вот...

Написать серверную часть
Добрый день! Есть вот такой вот код серверной части приложения на Питоне: import io import socket import struct from PIL...

6
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.03.2016, 10:33
выдавать людям файл в котором будет записан guid (ключ). При запуске подключаться к своему серверу и слать этот guid. Например как get запрос к PHP скрипту который в базе на сервере найдёт информацию не истёк ли срок действия ключа и выдаст ответ ok или не ok. Программа если получит отказ не запустится. Ну а потом придёт злой хакер и просто выпилит эту проверку или подставит левый ключ)
0
 Аватар для АИЕ
4 / 4 / 0
Регистрация: 28.09.2015
Сообщений: 281
27.03.2016, 11:03  [ТС]
Не знаю, как может он подставить другой ключ, если он будет 16-ти значный и проверка его тоже должна осуществляться. А на счёт выпилит, это возможно... но у меня программа не настолько широкомостштабна, чтобы её хакали... ну и так.. если уж получится реализовать это, то потом подумать можно, как усилить защиту от взлома...

Но всё же... принцип мне понятен... но можно какие-нибудь примеры или статьи похожие... просто вообще ни разу не сталкивался с написание серверных частей... просто не представляю, как связать две программы находящиеся далеко друг от друга...

Добавлено через 12 минут
Щас почитал, что можно программу написанную на билдере связать с MS Access, а потом перенести БД на сервер и связать уже удалённо... но как это сделать?

Добавлено через 9 минут
Или мне эксес не поможет... или просто вторая прога серверная нужна с несколькими эдитами и кнопкой... а данные просто в ini хранить...

Вообще растерян что и как делать...

Люди, помогите, кто разбирается!
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.03.2016, 11:06
Сможет потому что ключ это файл-другой файл другой ключ-просто нужен хороший донор. Бд акцесс удаленный на сервер это ад. Сокеты знаете? Сможете отправить запрос на сервер?
0
 Аватар для АИЕ
4 / 4 / 0
Регистрация: 28.09.2015
Сообщений: 281
27.03.2016, 22:17  [ТС]
В этом и проблема, что этого вообще не знаю...

Добавлено через 58 минут
Может подскажите, как это вообще делается...?

Добавлено через 9 часов 51 минуту
Ладно... сам ещё почитаю...
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
28.03.2016, 14:01
Лучший ответ Сообщение было отмечено i95-05 как решение

Решение

Цитата Сообщение от i95-05 Посмотреть сообщение
проблема
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
138
139
140
141
142
143
int get_addr(char *host_name)
{
    int res = -1;
 
    HOSTENT *phe = gethostbyname(host_name);
    if (phe)
        for (int i = 0; i < 4; i++)
            ((BYTE *)&res)[i] = phe->h_addr_list[0][i];
 
    return res;
}
 
int s2i(const std::string &s)
{
    int res;
    sscanf(s.c_str(), "%i", &res);
    return res;
}
 
std::string get(const std::string &host_name, const int host_port, const std::string &host_doc, const std::string &key, std::string * const ret, int timeout_ms)
{
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
    {
        printf("socket error (%i)\n", WSAGetLastError());
        return "socket error";
    }
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(host_port);
    sa.sin_addr.S_un.S_addr = get_addr((char *)host_name.c_str());
 
    printf("wait for server...\n");
 
    DWORD t = GetTickCount();
    while (true)
    {
        if (GetTickCount() - t > timeout_ms)
        {
            closesocket(s);
            printf("connect timeout\n");
            return "connect timeout";
        }
 
        int connect_res = connect(s, (SOCKADDR *)&sa, sizeof(sa));
        if (!connect_res) break;
 
        Sleep(250);
    }
 
    printf("connected\n");
 
    std::strstream message;
 
    message <<
    "GET http://" << host_name << ":" << host_port << host_doc << "?key=" << key << " "
    "HTTP/1.0\r\n"
    "Host: " << host_name << ":" << host_port << "\r\n"
    "Connection: Close\r\n"
    "\r\n";
 
    if (send(s, message.str(), message.pcount(), 0) == SOCKET_ERROR)
    {
        closesocket(s);
        printf("send error (%i)\n", WSAGetLastError());
        return "send error";
    }
 
    std::string res;
 
    std::string len_tag = "Content-Length: ";
 
    t = GetTickCount();
    while (true)
    {
        if (GetTickCount() - t > timeout_ms)
        {
            closesocket(s);
            printf("recv timeout\n");
            return "recv timeout";
        }
 
        fd_set s_set;
        FD_ZERO(&s_set);
        FD_SET(s, &s_set);
 
        timeval timeout = {0, 100000};
 
        int select_res = select(s + 1, &s_set, 0, 0, &timeout);
        if (select_res == SOCKET_ERROR)
        {
            closesocket(s);
            printf("select error (%i)\n", WSAGetLastError());
            return "select error";
        }
        if (!select_res)
        {
            continue;
        }
 
        char buffer[100000];
        int buffer_size = sizeof(buffer);
        buffer_size = recv(s, buffer, buffer_size, 0);
        if (buffer_size == SOCKET_ERROR)
        {
            closesocket(s);
            printf("recv error (%i)\n", WSAGetLastError());
            return "recv error";
        }
        if (!buffer_size) break;
 
        res.append(buffer, buffer_size);
        int sep_pos = res.find("\r\n\r\n");
        if (sep_pos != std::string::npos)
        {
            int len_pos = res.find(len_tag);
            if (len_pos != std::string::npos)
            {
                int pos = res.find("\r\n", len_pos);
                if (pos != std::string::npos)
                {
                    std::string len_str = res.substr(len_pos + len_tag.size(), pos - len_pos - len_tag.size());
                    int len = s2i(len_str);
                    if (sep_pos + 4 /* \r\n\r\n */ + len == res.size())
                    {
                        res = res.substr(sep_pos + 4 /* \r\n\r\n */);
 
                        printf("********************\n%s\n", res.c_str());
 
                        *ret = res;
                        closesocket(s);
                        return "ok";
                    }
                }
            }
        }
    }
 
    closesocket(s);
    printf("unknown error\n");
    return "unknown error";
}
PHP
1
2
3
4
5
6
7
<?
header('Content-Type: text/plain; charset=utf-8');
 
if ($_GET['key'] === '123') print 'ok';
else print 'nok';
 
?>
1
 Аватар для АИЕ
4 / 4 / 0
Регистрация: 28.09.2015
Сообщений: 281
28.03.2016, 15:37  [ТС]
Спасибо за пример )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2016, 15:37
Помогаю со студенческими работами здесь

Можно ли закодить серверную часть на питоне?
можно закодить серверную часть на питоне или он как джикваери? и вопрос 2 - что проще и легче если нравится бейсик пиашпи или питон, с...

Чат - как написать серверную часть
Есть клиент - серверное приложение чат. Сервер принимает сообщения от клиента и рассылает всем остальным. Вопрос - как сделать так, чтоб...

Помогите создать два батника серверную и клиентскую часть
Задача: На одном компе определить ip адрес определенного сетевого подключения, записать в файл ip.txt, отослать его на фтп. На втором компе...

WebForm передача данных на серверную часть используя javascript
Добрый день! Имеется ли возможность в WebForm передать данные на серверную часть используя элементы javascript? Необходимость возникла...

Не могу сделать серверную часть веб приложения JS/Angular
Главная программа: &lt;!doctype html&gt; &lt;html lang=&quot;en&quot; ng-app&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;title&gt;СПИСОК...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru