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

Как работать с OnReceive(), как реагировать на входящие данные?

03.11.2010, 17:29. Показов 1932. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть клиент и сервер, так вот сервер должен обрабатывать входящие подключения,
и я пишу:
CSocket s;
s.Create(1569);
s.Listen();
А как заставить этот сокет реагировать на входящие данные?
И что-то я недопонял как обращаться с OnReceive(), в книжке
написано 'Часто переопределяется в производных классах' я делал так:
//Производный класс
class d : public CSocket
{
public:
virtual void OnReceive(int nErrorCode);
};

void d::OnReceive(int k)
{
char m[11]='';
s.Receive(m, 10);

MessageBox(0,m,'',0);
}
че-то не работает, помогите чем могите .
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2010, 17:29
Ответы с готовыми решениями:

Как отсортировать входящие данные?
Задача с тимуса 1001. Обратный корень Ограничение времени: 2.0 секунды Ограничение памяти: 64 МБ Эта задача настолько проста, что...

Как проверить ВСЕ входящие данные?
Доброе утро форумчане. Собственно сабж. Уточнение: я хочу отфильтровать весь массив GET и POST, т.е написать универсальный класс(функцию)...

Как работать с .SDF - как сохранить данные?
Есть Local Database. В нем табличка. Ни как не получается сохранить данные в эту табличку из кода.. Как это сделать? ...

3
Flanker
04.11.2010, 10:01
Кхм. Вот хелпик по поводу работы с сокетами. Через CSocket у меня тоже толком ничего не вышло. А через это все получилось

16. Работа с WinSocket

Socket (гнездо, разъем) - абстрактное программное понятие, используемое для обозначения в прикладной
программе конечной точки канала связи с коммуникационной средой, образованной вычислительной сетью.
При использовании протоколов TCP/IP можно говорить, что socket является средством подключения
прикладной программы к порту (см. выше) локального узла сети.

Socket-интерфейс представляет собой просто набор системных вызовов и/или библиотечных функций языка
программирования СИ, разделенных на четыре группы:

1. Локального управления
2. Установления связи
3. Обмена данными (ввода/вывода)
4. Закрытия связи
5. Пример использования WinSocket


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

1. Функции локального управления

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

1.1 Создание socket'а

Создание socket'а осуществляется следующим системным вызовом


#include <sys/socket.h>
int socket (domain, type, protocol)
int domain;
int type;
int protocol;

Аргумент domain задает используемый для взаимодействия набор протоколов (вид коммуникационной
области), для стека протоколов TCP/IP он должен иметь символьное значение AF_INET (определено в
sys/socket.h).

Аргумент type задает режим взаимодействия:

SOCK_STREAM - с установлением соединения;
SOCK_DGRAM - без установления соединения.

Аргумент protocolзадает конкретный протокол транспортного уровня (из нескольких возможных в стеке
протоколов). Если этот аргумент задан равным 0, то будет использован протокол 'по умолчанию' (TCP для
SOCK_STREAM и UDP для SOCK_DGRAM при использовании комплекта протоколов TCP/IP).

При удачном завершении своей работы данная функция возвращает дескриптор socket'а - целое
неотрицательное число, однозначно его идентифицирующее. Дескриптор socket'а аналогичен дескриптору
файла ОС UNIX.

При обнаружении ошибки в ходе своей работы функция возвращает число '-1'.

1.2. Связывание socket'а

Для подключения socket'а к коммуникационной среде, образованной вычислительной сетью, необходимо
выполнить системный вызов bind, определяющий в принятом для сети формате локальный адрес канала связи
со средой. В сетях TCP/IP socket связывается с локальным портом. Системный вызов bind имеет следующий
синтаксис:


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int bind (s, addr, addrlen)
int s;
struct sockaddr *addr;
int addrlen;

Аргумент s задает дескриптор связываемого socket'а.

Аргумент addr в общем случае должен указывать на структуру данных, содержащую локальный адрес,
приписываемый socket'у. Для сетей TCP/IP такой структурой является sockaddr_in.

Аргумент addrlen задает размер (в байтах) структуры данных, указываемой аргументом addr.

Структура sockaddr_in используется несколькими системными вызовами и функциями socket-интерфейса и
оп одимости в выполнении
системного вызова connect нет. Однако, его выполнение в таком режиме не является ошибкой - просто
меняется смысл выполняемых при этом действий: устанавливается адрес 'по умолчанию' для всех
последующих посылок дейтаграмм.

2.3. Прием запроса на установление связи

Для приема запросов от программ-клиентов на установление связи в программах-серверах используется
системный вызов accept, имеющий следующий вид:


#include <sys/socket.h>
#include <netinet/in.h>
int accept (s, addr, p_addrlen)
int s;
struct sockaddr_in *addr;
int *p_addrlen;

Аргумент s задает дескриптор socket'а, через который программа-сервер получила запрос на соединение
(посредством системного запроса listen ).

Аргумент addr должен указывать на область памяти, размер которой позволял бы разместить в ней структуру
данных, содержащую адрес socket'а программы-клиента, сделавшей запрос на соединение. Никакой
инициализации этой области не требуется.

Аргумент p_addrlen должен указывать на область памяти в виде целого числа, задающего размер (в байтах)
области памяти, указываемой аргументом addr.

Системный вызов accept извлекает из очереди, организованной системным вызовом listen, первый запрос на
соединение и возвращает дескриптор нового (автоматически созданного) socket'а с теми же свойствами, что и
socket, задаваемый аргументом s. Этот новый дескриптор необходимо использовать во всех последующих
операциях обмена данными.

Кроме того после удачного завершения accept:

1.область памяти, указываемая аргументом addr, будет содержать структуру данных (для сетей TCP/IP
это sockaddr_in), описывающую адрес socket'а программы-клиента, через который она сделала свой
запрос на соединение;
2.целое число, на которое указывает аргумент p_addrlen, будет равно размеру этой структуры данных.

Если очередь запросов на момент выполнения accept пуста, то программа переходит в состояние ожидания
поступления запросов от клиентов на неопределенное время (хотя такое поведение accept можно и изменить).

Признаком неудачного завершения accept служит отрицательное возвращенное значение (дескриптор socket'а
отрицательным быть не может).

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

2.4. Формирование адреса узла сети

Для получения адреса узла сети TCP/IP по его символическому имени используется библиотечная функция


#include <netinet/in.h>
#include <netdb.h>
struct hostent *gethostbyname (name)
char *name;

Аргумент name задает адрес последовательности литер, образующих символическое имя узла сети.

При успешном завершении функция возвращает указатель на структуру hostent, определенную в
include-файле netdb.h и имеющую следующий вид


struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_lenght;
char *h_addr;
};

Поле h_name указывает на официальное (основное) имя узла.

Поле h_aliases указывает на список дополнительных имен узла (синонимов), если они есть.

Поле h_addrtype содержит идентификатор используемого набора протоколов, для сетей TCP/IP это поле будет
иметь значение AF_INET.

Поле h_lenght содержит длину адреса узла.

Поле h_addr указывает на область памяти, содержащую адрес узла в том виде, в котором его используют
системные вызовы и функции socket-интерфейса.

Пример обращения к функции gethostbyname для получения адреса удаленного узла в программе-клиенте,
использующей системный вызов connect для формирования запроса на установления соединения с
программой-сервером на этом узле, расс такой ситуации необходимо использовать описываемый далее
системный вызов shutdown.

4.2. Сброс буферизованных данных

Для 'экстренного' закрытия связи с партнером (путем 'сброса' еще не переданных данных) используется
системный вызов shutdown, выполняемый перед close и имеющий следующий вид


int shutdown (s, how)
int s;
int how;

Аргумент s задает дескриптор ранее созданного socket'а.

Аргумент how задает действия, выполняемые при очистке системных буферов socket'а:

0 - сбросить и далее не принимать данные для чтения из socket'а;
1 - сбросить и далее не отправлять данные для посылки через socket;
2 - сбросить все данные, передаваемые через socket в любом направлении.

5. Пример использования socket-интерфейса

В данном разделе рассматривается использование socket-интерфейса в режиме взаимодействия с
установлением логического соединения на очень простом примере взаимодействия двух программ (сервера
и клиента), функционирующих на разных узлах сети TCP/IP.

Содержательная часть программ примитивна:

1.сервер, приняв запрос на соединение, передает клиенту вопрос 'Who are you?';
2.клиент, получив вопрос, выводит его в стандартный вывод и направляет серверу ответ 'I am your client'
и завершает на этом свою работу;
3.сервер выводит в стандартный вывод ответ клиента, закрывает с ним связь и переходит в состояние
ожидания следующего запроса к нему.

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

5.1. Программа-сервер

Текст программы-сервера на языке программирования СИ выглядит следующим образом


1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <netinet/in.h>
4 #include <netdb.h>
5 #include <memory.h>

6 #define SRV_PORT 1234
7 #define BUF_SIZE 64
8 #define TXT_QUEST 'Who are you?
'

9 main () {
10 int s, s_new;
11 int from_len;
12 char buf[BUF_SIZE];
13 struct sockaddr_in sin, from_sin;

14 s = socket (AF_INET, SOCK_STREAM, 0);
15 memset ((char *)&sin, '*', sizeof(sin));
16 sin.sin_family = AF_INET;
17 sin.sin_addr.s_addr = INADDR_ANY;
18 sin.sin_port = SRV_PORT;
19 bind (s, (struct sockaddr *)&sin, sizeof(sin));
20 listen (s, 3);
21 while (1) {
22 from_len = sizeof(from_sin);
23 s_new = accept (s, &from_sin, &from_len);
24 write (s_new, TXT_QUEST, sizeof(TXT_QUEST));
25 from_len = read (s_new, buf, BUF_SIZE);
26 write (1, buf, from_len);
27 shutdown (s_new, 0);
28 close (s_new);
29 };
30 }

Строки 1...5 описывают включаемые файлы, содержащие определения для всех необходимых структур данных
и символических констант.

Строка 6 приписывает целочисленной константе 1234 символическое имя SRV_PORT. В дальнейшем эта
константа будет использована в качестве номера порта сервера. Значение этой константы должно быть
известно и программе-клиенту.

Строка 7 приписывает целочисленной константе 64 символическое имя BUF_SIZE. Эта константа будет
определять размер буфера, используемого для размещения принимаемых от клиента данных.

Строка 8 приписывает последовательности символов, составляющих текст вопроса клиенту, символическое
имя TXT_QUEST. Последним символом в последовательности является символ перехода на новую с 29 from_len = recv (s, buf, BUF_SIZE, 0);
30 write (1, buf, from_len);
31 send (s, TXT_ANSW, sizeof(TXT_ANSW), 0);
32 close (s);
33 exit (0);
34 }

В строках 6 и 7 описываются константы SRV_HOST и SRV_PORT, определяющие имя удаленного узла, на
котором функционирует программа-сервер, и номер порта, к которому привязан socket сервера.

Строка 8 приписывает целочисленной константе 1235 символическое имя CLNT_PORT. В дальнейшем эта
константа будет использована в качестве номера порта клиента.

В строках 17...22 создается привязанный к порту на локальном узле socket.

В строке 24 посредством библиотечной функции gethostbyname транслируется символическое имя
удаленного узла (в данном случае 'delta'), на котором должен функционировать сервер, в адрес этого узла,
размещенный в структуре типа hostent.

В строке 26 адрес удаленного узла копируется из структуры типа hostent в соответствующее поле структуры
srv_sin, которая позже (в строке 28) используется в системном вызове connect для идентификации
программы-сервера.

В строках 29...31 осуществляется обмен данными с сервером и вывод вопроса, поступившего от сервера, в
стандартный вывод.

Строка 32 посредством системного вызова close закрывает (удаляет) socket.
Flanker
04.11.2010, 10:01
Кхм. Вот хелпик по поводу работы с сокетами. Через CSocket у меня тоже толком ничего не вышло. А через это все получилось

16. Работа с WinSocket

Socket (гнездо, разъем) - абстрактное программное понятие, используемое для обозначения в прикладной
программе конечной точки канала связи с коммуникационной средой, образованной вычислительной сетью.
При использовании протоколов TCP/IP можно говорить, что socket является средством подключения
прикладной программы к порту (см. выше) локального узла сети.

Socket-интерфейс представляет собой просто набор системных вызовов и/или библиотечных функций языка
программирования СИ, разделенных на четыре группы:

1. Локального управления
2. Установления связи
3. Обмена данными (ввода/вывода)
4. Закрытия связи
5. Пример использования WinSocket


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

1. Функции локального управления

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

1.1 Создание socket'а

Создание socket'а осуществляется следующим системным вызовом


#include <sys/socket.h>
int socket (domain, type, protocol)
int domain;
int type;
int protocol;

Аргумент domain задает используемый для взаимодействия набор протоколов (вид коммуникационной
области), для стека протоколов TCP/IP он должен иметь символьное значение AF_INET (определено в
sys/socket.h).

Аргумент type задает режим взаимодействия:

SOCK_STREAM - с установлением соединения;
SOCK_DGRAM - без установления соединения.

Аргумент protocolзадает конкретный протокол транспортного уровня (из нескольких возможных в стеке
протоколов). Если этот аргумент задан равным 0, то будет использован протокол 'по умолчанию' (TCP для
SOCK_STREAM и UDP для SOCK_DGRAM при использовании комплекта протоколов TCP/IP).

При удачном завершении своей работы данная функция возвращает дескриптор socket'а - целое
неотрицательное число, однозначно его идентифицирующее. Дескриптор socket'а аналогичен дескриптору
файла ОС UNIX.

При обнаружении ошибки в ходе своей работы функция возвращает число '-1'.

1.2. Связывание socket'а

Для подключения socket'а к коммуникационной среде, образованной вычислительной сетью, необходимо
выполнить системный вызов bind, определяющий в принятом для сети формате локальный адрес канала связи
со средой. В сетях TCP/IP socket связывается с локальным портом. Системный вызов bind имеет следующий
синтаксис:


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int bind (s, addr, addrlen)
int s;
struct sockaddr *addr;
int addrlen;

Аргумент s задает дескриптор связываемого socket'а.

Аргумент addr в общем случае должен указывать на структуру данных, содержащую локальный адрес,
приписываемый socket'у. Для сетей TCP/IP такой структурой является sockaddr_in.

Аргумент addrlen задает размер (в байтах) структуры данных, указываемой аргументом addr.

Структура sockaddr_in используется несколькими системными вызовами и функциями socket-интерфейса и
оп одимости в выполнении
системного вызова connect нет. Однако, его выполнение в таком режиме не является ошибкой - просто
меняется смысл выполняемых при этом действий: устанавливается адрес 'по умолчанию' для всех
последующих посылок дейтаграмм.

2.3. Прием запроса на установление связи

Для приема запросов от программ-клиентов на установление связи в программах-серверах используется
системный вызов accept, имеющий следующий вид:


#include <sys/socket.h>
#include <netinet/in.h>
int accept (s, addr, p_addrlen)
int s;
struct sockaddr_in *addr;
int *p_addrlen;

Аргумент s задает дескриптор socket'а, через который программа-сервер получила запрос на соединение
(посредством системного запроса listen ).

Аргумент addr должен указывать на область памяти, размер которой позволял бы разместить в ней структуру
данных, содержащую адрес socket'а программы-клиента, сделавшей запрос на соединение. Никакой
инициализации этой области не требуется.

Аргумент p_addrlen должен указывать на область памяти в виде целого числа, задающего размер (в байтах)
области памяти, указываемой аргументом addr.

Системный вызов accept извлекает из очереди, организованной системным вызовом listen, первый запрос на
соединение и возвращает дескриптор нового (автоматически созданного) socket'а с теми же свойствами, что и
socket, задаваемый аргументом s. Этот новый дескриптор необходимо использовать во всех последующих
операциях обмена данными.

Кроме того после удачного завершения accept:

1.область памяти, указываемая аргументом addr, будет содержать структуру данных (для сетей TCP/IP
это sockaddr_in), описывающую адрес socket'а программы-клиента, через который она сделала свой
запрос на соединение;
2.целое число, на которое указывает аргумент p_addrlen, будет равно размеру этой структуры данных.

Если очередь запросов на момент выполнения accept пуста, то программа переходит в состояние ожидания
поступления запросов от клиентов на неопределенное время (хотя такое поведение accept можно и изменить).

Признаком неудачного завершения accept служит отрицательное возвращенное значение (дескриптор socket'а
отрицательным быть не может).

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

2.4. Формирование адреса узла сети

Для получения адреса узла сети TCP/IP по его символическому имени используется библиотечная функция


#include <netinet/in.h>
#include <netdb.h>
struct hostent *gethostbyname (name)
char *name;

Аргумент name задает адрес последовательности литер, образующих символическое имя узла сети.

При успешном завершении функция возвращает указатель на структуру hostent, определенную в
include-файле netdb.h и имеющую следующий вид


struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_lenght;
char *h_addr;
};

Поле h_name указывает на официальное (основное) имя узла.

Поле h_aliases указывает на список дополнительных имен узла (синонимов), если они есть.

Поле h_addrtype содержит идентификатор используемого набора протоколов, для сетей TCP/IP это поле будет
иметь значение AF_INET.

Поле h_lenght содержит длину адреса узла.

Поле h_addr указывает на область памяти, содержащую адрес узла в том виде, в котором его используют
системные вызовы и функции socket-интерфейса.

Пример обращения к функции gethostbyname для получения адреса удаленного узла в программе-клиенте,
использующей системный вызов connect для формирования запроса на установления соединения с
программой-сервером на этом узле, расс такой ситуации необходимо использовать описываемый далее
системный вызов shutdown.

4.2. Сброс буферизованных данных

Для 'экстренного' закрытия связи с партнером (путем 'сброса' еще не переданных данных) используется
системный вызов shutdown, выполняемый перед close и имеющий следующий вид


int shutdown (s, how)
int s;
int how;

Аргумент s задает дескриптор ранее созданного socket'а.

Аргумент how задает действия, выполняемые при очистке системных буферов socket'а:

0 - сбросить и далее не принимать данные для чтения из socket'а;
1 - сбросить и далее не отправлять данные для посылки через socket;
2 - сбросить все данные, передаваемые через socket в любом направлении.

5. Пример использования socket-интерфейса

В данном разделе рассматривается использование socket-интерфейса в режиме взаимодействия с
установлением логического соединения на очень простом примере взаимодействия двух программ (сервера
и клиента), функционирующих на разных узлах сети TCP/IP.

Содержательная часть программ примитивна:

1.сервер, приняв запрос на соединение, передает клиенту вопрос 'Who are you?';
2.клиент, получив вопрос, выводит его в стандартный вывод и направляет серверу ответ 'I am your client'
и завершает на этом свою работу;
3.сервер выводит в стандартный вывод ответ клиента, закрывает с ним связь и переходит в состояние
ожидания следующего запроса к нему.

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

5.1. Программа-сервер

Текст программы-сервера на языке программирования СИ выглядит следующим образом


1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <netinet/in.h>
4 #include <netdb.h>
5 #include <memory.h>

6 #define SRV_PORT 1234
7 #define BUF_SIZE 64
8 #define TXT_QUEST 'Who are you?
'

9 main () {
10 int s, s_new;
11 int from_len;
12 char buf[BUF_SIZE];
13 struct sockaddr_in sin, from_sin;

14 s = socket (AF_INET, SOCK_STREAM, 0);
15 memset ((char *)&sin, '*', sizeof(sin));
16 sin.sin_family = AF_INET;
17 sin.sin_addr.s_addr = INADDR_ANY;
18 sin.sin_port = SRV_PORT;
19 bind (s, (struct sockaddr *)&sin, sizeof(sin));
20 listen (s, 3);
21 while (1) {
22 from_len = sizeof(from_sin);
23 s_new = accept (s, &from_sin, &from_len);
24 write (s_new, TXT_QUEST, sizeof(TXT_QUEST));
25 from_len = read (s_new, buf, BUF_SIZE);
26 write (1, buf, from_len);
27 shutdown (s_new, 0);
28 close (s_new);
29 };
30 }

Строки 1...5 описывают включаемые файлы, содержащие определения для всех необходимых структур данных
и символических констант.

Строка 6 приписывает целочисленной константе 1234 символическое имя SRV_PORT. В дальнейшем эта
константа будет использована в качестве номера порта сервера. Значение этой константы должно быть
известно и программе-клиенту.

Строка 7 приписывает целочисленной константе 64 символическое имя BUF_SIZE. Эта константа будет
определять размер буфера, используемого для размещения принимаемых от клиента данных.

Строка 8 приписывает последовательности символов, составляющих текст вопроса клиенту, символическое
имя TXT_QUEST. Последним символом в последовательности является символ перехода на новую с 29 from_len = recv (s, buf, BUF_SIZE, 0);
30 write (1, buf, from_len);
31 send (s, TXT_ANSW, sizeof(TXT_ANSW), 0);
32 close (s);
33 exit (0);
34 }

В строках 6 и 7 описываются константы SRV_HOST и SRV_PORT, определяющие имя удаленного узла, на
котором функционирует программа-сервер, и номер порта, к которому привязан socket сервера.

Строка 8 приписывает целочисленной константе 1235 символическое имя CLNT_PORT. В дальнейшем эта
константа будет использована в качестве номера порта клиента.

В строках 17...22 создается привязанный к порту на локальном узле socket.

В строке 24 посредством библиотечной функции gethostbyname транслируется символическое имя
удаленного узла (в данном случае 'delta'), на котором должен функционировать сервер, в адрес этого узла,
размещенный в структуре типа hostent.

В строке 26 адрес удаленного узла копируется из структуры типа hostent в соответствующее поле структуры
srv_sin, которая позже (в строке 28) используется в системном вызове connect для идентификации
программы-сервера.

В строках 29...31 осуществляется обмен данными с сервером и вывод вопроса, поступившего от сервера, в
стандартный вывод.

Строка 32 посредством системного вызова close закрывает (удаляет) socket.
MaD1
04.11.2010, 16:48
Спасибо, попробую
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2010, 16:48
Помогаю со студенческими работами здесь

Как работать с файлом Excel, читать, записывать данные
Здравствуйте. Вот, в общем, решил поинтересоваться Вашими советами насчёт моей проблемы. Я имею некую «Базу данных» в Excel, т.е....

Как работать с XML, но записывать данные не в файл, а в переменную
Здравствуйте! Подскажите как мне работать с XML, но записывать данные не в файл, а в переменную типа string? Обычно я использую такой...

Как взять данные с одной функции и работать с другой
Доброго времени суток! Как сделать так что бы из функции GetWage собрать все данные и уже использовать с AvgWage(). Или как переписать,...

Сгорела видюха , поставил новую после чего второй винт SATA перестал вообще как либо реагировать, при включении компа вроде как заводится , но потом т
Вот такая история... Сгорела видюха , поставил новую после чего второй винт SATA перестал вообще как либо реагировать, при включении компа...

Как заставить CEdit реагировать на ' ' ?
Cstring x('haha ha'); CEdit Edit; Edit.SetWindowText(x) - не реагирует на Cstring x('haha ha'); Edit.SetWindowText(x) -...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru