Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 38

Ошибка 10035 сокеты

01.02.2022, 14:28. Показов 6160. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю чат на сокетах + CLI, сервер сам сервер работает нормально, ибо он может приконектится к клиенту(созданы два других ехе консольных файла, которые работают между собой). Так вот сам сервер на CLI, спокойно работает с просто консольным клиентом, портировал сам код клиента в CLI, и получаю ошибку 10035 в сокетах. Помогите!
Код клиента на CLI:
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
private: System::Void pictureBox3_Click(System::Object^ sender, System::EventArgs^ e) {
    marshal_context^ marshal = gcnew marshal_context();
    String^ msgg = this->richTextBox1->Text;
    this->richTextBox1->Text = "";
    this->label1->Text = msgg;
    std::string msg = marshal->marshal_as<const char*>(msgg);
    int msg_size = msg.length();
    Packet packettype = P_ChatMessage;
    send(Connection, (char*)&packettype, sizeof(Packet), NULL);
    send(Connection, (char*)&msg_size, sizeof(int), NULL);
    send(Connection, msg.c_str(), msg_size, NULL);
    this->richTextBox1->Text = "Не удалось отправить данные!" + WSAGetLastError();
    this->pictureBox4->Size = System::Drawing::Size(47 + msgg->Length * 8, 31);
    this->label1->Size = System::Drawing::Size(16 + msgg->Length * 7, 16);
    this->pictureBox4->Location = System::Drawing::Point(703 - msgg->Length * 8, 360);
    this->label1->Location = System::Drawing::Point(720 - msgg->Length * 8, 369);
    msg_on_screen++;
}
 
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
    WSAAsyncSelect(Connection, HWND(Handle.ToPointer()), WM_SOCKETREADY, FD_READ);
        recv(Connection, (char*)&packettypeC, sizeof(Packet), NULL);
        
        //this->richTextBox1->Text = gcnew String((char*)packettypeC);
        this->richTextBox1->Text = "Не удалось считать данные!" + WSAGetLastError();
        switch (packettypeC) {
        case P_ChatMessage:
        {
            int msg_size;
            recv(Connection, (char*)&msg_size, sizeof(int), NULL);
            char* msg = new char[msg_size + 1];
            msg[msg_size] = '\0';
            recv(Connection, msg, msg_size, NULL);
            std::cout << msg << std::endl;
            String^ msg_rcv;
            msg_rcv = gcnew String(msg);
            this->label2->Text = msg_rcv;
            this->label2->Size = System::Drawing::Size(16 + msg_rcv->Length * 7, 16);
            this->pictureBox5->Size = System::Drawing::Size(47 + msg_rcv->Length * 8, 31);
            this->pictureBox5->Location = System::Drawing::Point(23, 360);
            this->label2->Location = System::Drawing::Point(39 + msg_rcv->Length / 4, 369);
            break;
        }
        case P_Test:
            //this->richTextBox1->Text = "Соединение установлено!";
            break;
        default:
            std::cout << "Не удалось создать пакет: " << packettypeC << std::endl;
            break;
        }
}
private: System::Void pictureBox8_Click(System::Object^ sender, System::EventArgs^ e) { //подключавется к серверу
 
    Socialnetwork::Server::TheInstance->ControlBox = true; //колхозно отправляет серверу, что надо выполнить команду accept
    printf("client\n");
 
    WSADATA wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        std::cout << "Error" << std::endl;
    }
 
    sizeofaddr = sizeof(addr);
    addrc.sin_addr.s_addr = inet_addr("127.0.0.1");
    addrc.sin_port = htons(1111);
    addrc.sin_family = AF_INET;
 
 
    Connection = socket(AF_INET, SOCK_STREAM, NULL);
    WSAAsyncSelect(Connection, HWND(Handle.ToPointer()), WM_SOCKETREADY, FD_READ);
    if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
        this->richTextBox1->Text = "Не удалось подключиться!" + WSAGetLastError();
    }
    this->richTextBox1->Text = "Подключено!";
    
    this->pictureBox8->Visible = false;
    this->pictureBox9->Visible = true;
    this->timer1->Enabled = true;
    this->timer2->Enabled = true;
    
}
private: System::Void pictureBox9_Click(System::Object^ sender, System::EventArgs^ e) {
    closesocket(Connection);
    WSACleanup();
    this->pictureBox9->Visible = false;
    this->pictureBox8->Visible = true;
    this->timer1->Enabled = false;
    this->timer2->Enabled = false;
}
Код консольного клиента:
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
#include <stdio.h>
#include <tchar.h>
#include <SDKDDKVer.h>
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>
#include <iostream>
#include <string>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#pragma warning(disable: 4996)
 
SOCKET Connection;
 
enum Packet {
    P_ChatMessage,
    P_Test
};
 
bool ProcessPacket(Packet packettype) {
    switch (packettype) {
    case P_ChatMessage:
    {
        int msg_size;
        recv(Connection, (char*)&msg_size, sizeof(int), NULL);
        char* msg = new char[msg_size + 1];
        msg[msg_size] = '\0';
        recv(Connection, msg, msg_size, NULL);
        std::cout << msg << std::endl;
        delete[] msg;
        break;
    }
    case P_Test:
        std::cout << "Сервер не найден.\n";
        break;
    default:
        std::cout << "Не удалось создать пакет: " << packettype << std::endl;
        break;
    }
 
    return true;
}
 
void ClientHandler() {
    Packet packettype;
    while (true) {
        recv(Connection, (char*)&packettype, sizeof(Packet), NULL);
 
        if (!ProcessPacket(packettype)) {
            break;
        }
    }
    closesocket(Connection);
}
 
int main(int argc, char* argv[]) {
    setlocale(LC_ALL, "Russian");
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        std::cout << "Error" << std::endl;
        exit(1);
    }
 
    SOCKADDR_IN addr;
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = htons(1111);
    addr.sin_family = AF_INET;
 
    Connection = socket(AF_INET, SOCK_STREAM, NULL);
    if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
        std::cout << "Ошибка не удалось присоединиться к серверу.\n";
        return 1;
    }
    std::cout << "Подключено!\n";
 
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, NULL, NULL, NULL);
 
    std::string msg1;
    while (true) {
        std::getline(std::cin, msg1);
        int msg_size = msg1.size();
        Packet packettype = P_ChatMessage;
        send(Connection, (char*)&packettype, sizeof(Packet), NULL);
        send(Connection, (char*)&msg_size, sizeof(int), NULL);
        send(Connection, msg1.c_str(), msg_size, NULL);
        Sleep(10);
    }
 
    system("pause");
    return 0;
}
Код консольного сервера(CLI сервер выкладывать смысла нет, ибо он работает нормально, а консольный будет более понятен для ознакомления):
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
#include <SDKDDKVer.h>
#include <stdio.h>
#include <tchar.h>
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <iostream>
 
#pragma warning(disable: 4996)
 
SOCKET Connections[100];
int Counter = 0;
 
enum Packet {
    P_ChatMessage,
    P_Test
};
 
bool ProcessPacket(int index, Packet packettype) {
    switch (packettype) {
    case P_ChatMessage:
    {
        int msg_size;
        recv(Connections[index], (char*)&msg_size, sizeof(int), NULL);
        char* msg = new char[msg_size + 1];
        msg[msg_size] = '\0';
        recv(Connections[index], msg, msg_size, NULL);
        for (int i = 0; i < Counter; i++) {
            if (i == index) {
                continue;
            }
 
            Packet msgtype = P_ChatMessage;
            send(Connections[i], (char*)&msgtype, sizeof(Packet), NULL);
            send(Connections[i], (char*)&msg_size, sizeof(int), NULL);
            send(Connections[i], msg, msg_size, NULL);
        }
        delete[] msg;
        break;
    }
    default:
        std::cout << "Клиент подключён!" << std::endl;
        break;
    }
 
    return true;
}
 
void ClientHandler(int index) {
    Packet packettype;
    while (true) {
        recv(Connections[index], (char*)&packettype, sizeof(Packet), NULL);
 
        if (!ProcessPacket(index, packettype)) {
            break;
        }
    }
    closesocket(Connections[index]);
}
 
int main(int argc, char* argv[]) {
    setlocale(LC_ALL, "Russian");
    //WSAStartup
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        std::cout << "Ошибка при создании пакета!" << std::endl;
        exit(1);
    }
 
    SOCKADDR_IN addr;
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = htons(1111);
    addr.sin_family = AF_INET;
 
    SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
    bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
    listen(sListen, SOMAXCONN);
 
    SOCKET newConnection;
    for(int i = 0; i < 100; i++){
        newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr);
 
        if (newConnection == 0) {
            std::cout << "Ошибка при подключении!\n";
        }
        else {
            std::cout << "Клиент подключен!\n";
            std::string msg = "Это сообщение будет отправлено всем клинетам!";
            int msg_size = msg.size();
            Packet msgtype = P_ChatMessage;
            send(newConnection, (char*)&msgtype, sizeof(Packet), NULL);
            send(newConnection, (char*)&msg_size, sizeof(int), NULL);
            send(newConnection, msg.c_str(), msg_size, NULL);
 
            Connections[i] = newConnection;
            Counter++;
            CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)(i), NULL, NULL);
 
            Packet testpacket = P_Test;
            send(newConnection, (char*)&testpacket, sizeof(Packet), NULL);
        }
    }
 
 
    system("pause");
    return 0;
}
Добавлено через 3 часа 13 минут
герой найдись!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2022, 14:28
Ответы с готовыми решениями:

Сокеты. Runtime ошибка
Доброе время суток! Нашёл небольшой сервер на с++, немного допилил под себя. Но после первого запроса &quot;клиента&quot;, сервер на него...

Ошибка при инициализации сокеты
Я на php написал функция для инициализации сокеты $socket = socket_create(AF_INET, SOCK_STREAM, 0); При запуске скрипта выдает...

Ошибка передачи данных - сокеты
Проблема состоит в следующем: работаю с сокетами, пытаюсь передать три строки от клиента к серверу по протоколу TCP. Привожу кусок кода из...

7
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.02.2022, 20:24
Цитата Сообщение от RomanZemin Посмотреть сообщение
получаю ошибку 10035 в сокетах.
10035 - это WSAEWOULDBLOCK. Т.е. это не ошибка, это код состояния, которое сообщает вам, что необходимо ожидать следующего события (чтения или записи). Данный код состояния появляется только на неблокирующих сокетах (которые собственно и предполагают асинхронное выполнения операций чтения\записи). Это нормальная ситуация, и при получении этого кода вам просто необходимо снова уйти на ожидание асинхронного события на сокете.

Я вижу, что вы использовали функцию WSAAsyncSelect, а она как раз делает используемые с ней сокеты неблокирующими. Вот выдержка из документации:
The WSAAsyncSelect function automatically sets socket s to nonblocking mode
https://docs.microsoft.com/en-... syncselect

Тщательно изучайте документацию на все функции, которые вы используете в своей программе.
0
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 38
01.02.2022, 20:49  [ТС]
Использовал данную функцию ранее, не совсем понимаю, почему она не играет роли в решении проблемы, сможете помочь?
C++
1
WSAAsyncSelect(Connection, HWND(Handle.ToPointer()), WM_SOCKETREADY, FD_READ);
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.02.2022, 21:02
Цитата Сообщение от RomanZemin Посмотреть сообщение
не совсем понимаю, почему она не играет роли в решении проблемы
Описание функции из документации:
The WSAAsyncSelect function requests Windows message-based notification of network events for a socket.
Где у вас в программе обработчик этой notification?

Вот ваш код:
C++
1
2
        WSAAsyncSelect(Connection, HWND(Handle.ToPointer()), WM_SOCKETREADY, FD_READ);
        recv(Connection, (char*)&packettypeC, sizeof(Packet), NULL);
В первой строке вы сказали: "хочу получать уведомление о событии на сокете в message-loop приложения" (пока помолчим где в принципе в CLI-приложении WinAPI-шный message loop).
А во второй строке говорите "давай сюда данные немедленно!". Вы не находите, что это дико странно?

Вы сразу же пытаетесь читать из этого сокета через recv. А как же нотификация через message-loop? Т.е. никакого recv после WSAAsyncSelect у вас в принципе не может быть. recv должен быть после получения нотификации о готовности к чтению через (в данном случае) message-loop приложения.

Если же немного посмотреть на этот код со стороны, то его вообще нужно весь выбросить и использовать родные, .NET средства работы с сетью.
1
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 38
02.02.2022, 12:04  [ТС]
Исправил, теперь ловлю сами предупреждение и даю "отстояться" программе, но теперь просто выдаёт каждый раз 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
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
    WSAAsyncSelect(Connection, WINDOW, WM_USER + 1, FD_ACCEPT);
        recv(Connection, (char*)&packettypeC, sizeof(Packet), NULL);
        int ierr = WSAGetLastError();
        if (ierr == WSAEWOULDBLOCK) {  // currently no data available
            Sleep(50);  // wait and try again
        }
        else {
 
            //this->richTextBox1->Text = gcnew String((char*)packettypeC);
            this->richTextBox1->Text = "Не удалось считать данные!" + WSAGetLastError(); //вот тут WSAGetLastError() отправляет 0!!!
            switch (packettypeC) {
            case P_ChatMessage:
            {
                int msg_size;
                WSAAsyncSelect(Connection, WINDOW, WM_USER + 1, FD_ACCEPT);
                recv(Connection, (char*)&msg_size, sizeof(int), NULL);
                if (ierr == WSAEWOULDBLOCK) {  // currently no data available
                    Sleep(50);  // wait and try again
                }
                else {
                    char* msg = new char[msg_size + 1];
                    msg[msg_size] = '\0';
                    WSAAsyncSelect(Connection, WINDOW, WM_USER + 1, FD_ACCEPT);
 
                    recv(Connection, msg, msg_size, NULL);
                    if (ierr == WSAEWOULDBLOCK) {  // currently no data available
                        Sleep(50);  // wait and try again
                    }
                    else {
                        std::cout << msg << std::endl;
                        String^ msg_rcv;
                        msg_rcv = gcnew String(msg);
                        this->label2->Text = msg_rcv;
                        this->label2->Size = System::Drawing::Size(16 + msg_rcv->Length * 7, 16);
                        this->pictureBox5->Size = System::Drawing::Size(47 + msg_rcv->Length * 8, 31);
                        this->pictureBox5->Location = System::Drawing::Point(23, 360);
                        this->label2->Location = System::Drawing::Point(39 + msg_rcv->Length / 4, 369);
                        break;
                    }
                }
            }
            case P_Test:
                //this->richTextBox1->Text = "Соединение установлено!";
                break;
            default:
                std::cout << "Не удалось создать пакет: " << packettypeC << std::endl;
                break;
            }
 
        }
}
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.02.2022, 13:22
Лучший ответ Сообщение было отмечено RomanZemin как решение

Решение

RomanZemin, нет это неправильно.
Если делать так, то WSAAsyncSelect вообще не нужен. Просто запустите блокирующий recv в отдельном потоке и все. WSAAsyncSelect не нужен вообще.

При использовании WSAAsyncSelect делать recv вы должны только после получения нотификации о доступности данных для чтения. Никакие Sleep в этом деле вам не помогут. Смотрите пример использования здесь: https://www.winsocketdotnetwor... hod5b.html

Но, как уже было сказано, все это не совсем корректно в CLI-приложении. Используйте родные средства .NET. Я понимаю, что вы хотите как-то малой кровью отделаться, поэтому не спешите вдумчиво читать документацию, или изучать .NET, но это в конечном счете будет оправданное вложение ваших ресурсов.
0
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 38
02.02.2022, 13:39  [ТС]
Перешестил кучу вариантов, есть одно но, все варианты, которые я вижу работают сугобо через циклы, а циклы в CLI вообще нельзя использовать, ибо они блокируют всю программу, даже находясь в потоке. Я понимаю, что ничего не понимаю. В консольной версии клиента всё работает идеально, а тут просто встречается неизвестные для меня способы.

Добавлено через 1 минуту
Использовать циклы во thread, а не в timer, тоже не подходит, т.к. thread не может изменять интерфейс, а выводить как-то надо.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.02.2022, 14:06
Цитата Сообщение от RomanZemin Посмотреть сообщение
все варианты, которые я вижу работают сугобо через циклы, а циклы в CLI вообще нельзя использовать, ибо они блокируют всю программу, даже находясь в потоке.
...
Цитата Сообщение от DrOffset Посмотреть сообщение
пока помолчим где в принципе в CLI-приложении WinAPI-шный message loop
поэтому:
Цитата Сообщение от DrOffset Посмотреть сообщение
нужно ... использовать родные, .NET средства работы с сетью.

Цитата Сообщение от RomanZemin Посмотреть сообщение
Использовать циклы во thread, а не в timer, тоже не подходит, т.к. thread не может изменять интерфейс, а выводить как-то надо.
thread может отправить главному потоку асинхронное сообщение об изменении интерфейса.
https://docs.microsoft.com/ru-... mework-4.8
https://docs.microsoft.com/ru-... mework-4.8

Добавлено через 3 минуты
Цитата Сообщение от RomanZemin Посмотреть сообщение
В консольной версии клиента всё работает идеально, а тут просто встречается неизвестные для меня способы.
CLI-приложение по своей природе асинхронное. При этом добавляет существенный слой абстракции над системными механизмами. Пока вы не начнете действовать по правилам, которые установлены в подобного рода приложениях, ничего у вас не получится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2022, 14:06
Помогаю со студенческими работами здесь

Понять в чем ошибка (Сокеты)
Выдает ошибку, которая показана на скриншоте. при открытии всех картинок, я передаю значение open_ через сокет, потом при чтении...

Сокеты в php на уровне IP протокола: ошибка
Доброго времени суток. Продолжаю изучать сокеты и написал такую программу для будущего echo-сервера. &lt;?php ...

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

Ошибка при обращению к серверу (сокеты) ftp.
При реализации функции передачи данных от сервера ftp клиенту выдает ошибку &quot;Invalid Patch!&quot;... Может я неправильно прописываю путь?...

Сокеты, ошибка доступа к элементу управления из потока
Здравствуйте. Такая проблема: использую сокеты для передачи текстовой информации, после получения, при попытке вывести на форму в текстовое...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru