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

Не могу отправить данные к серверу

18.09.2009, 09:50. Показов 2779. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день..
Есть протокол MMP mail agent http://agent.mail.ru/ru/developers/licence.html- вот его описание
Создаю сокет ,устанавливаю соединение , разобрался как формировать заголовок, далее отправляю пакет HELLO , приходит правильный ответ ASK со всеми параметрами , далее необходимо авторизоваться ...вот тут у меня проблемка... не знаю как правильно отправлять текстовые и числовые данные после заголовка...

" Все числовые данные передаются как четырехбайтные целые НЕ в сетевом формате, т. е. первым идет старший байт, последним младший. Четырехбайтовые беззнаковые целые обозначаются UL.
Текстовые данные передаются с префексированной длиной, т. е. сначала UL, а потом строка (в кодировке windows-1251) длины UL без завершающего нуля. Обозначение в дальнейшем - LPS."

Скажем , указав длину пакета в заголовке , я начинаю отправлять данные через функцию send
int send (s, buf, len, flags)
int s;
char *buf;
int len;
int flags;
Сначала надо отправить UL с длиной следующей строки... я не совсем понимаю как это сделать.. ведь данные будут отправляться в UL и как они будут преобразовываться к const char* -C++ ругается... я также пробовал отправлять в виде структуры этот тип также не получается....
Если кто не поленился заглянуть в описание протокола , подскажите что делать..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2009, 09:50
Ответы с готовыми решениями:

Не могу отправить запрос GET к серверу
procedure TForm1.Button2Click(Sender: TObject); var s: String; begin IdTCPClient1.Host := '127.0.0.1'; IdTCPClient1.Port :=...

Не могу отправить данные с МК на РС по USARTu(Atmega8535)
Здравствуйте! Помогите пож-та отправить данные от МК к РС. Динные - "HELLO, WORLD!". Проверка осуществляется с помощью программы COM Port...

Не могу отправить данные POST -ом в приложение
Кто работал с Internet Control не могу отправить данные POST -ом в приложение, Inet1.Execute (txtURL), 'POST', 'submit=login' ...

12
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.09.2009, 10:58
сначала всё формируешь, потом отправляешь поток байт

C
1
2
3
4
typedef struct {
    char msg[MAXBUF];
    unsigned short length;
} MsgBuf;
C
1
2
3
4
5
6
7
8
9
    MsgBuf b1, b2, b3;
 
    /* дальше заполняешь их в нужном порядке и байты и размеры */
 
    /* потом просто пишешь в сокет каждый буфер */
 
    MsgBuf answer;
 
    /* сюда читаешь ответ тоже в виде байтов */
сначала без функций, потом автоматизируешь сборку буфера и разбор ответа

буферы можно и по переменным разбирать и на экран выводить
0
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 4
18.09.2009, 12:11  [ТС]
Я делаю так


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
typedef struct mrim_packet_d
{ 
    u_long   dlen;  
    char* msg;
   }
mrim_packet_d;
//Потом создаю данные 
mrim_packet_d login,pass,agent,status;
login.dlen = sizeof(MAIL) -1 ;
login.msg =MAIL;
 
pass.dlen = sizeof(PASS)-1;
pass.msg = PASS;
 
status.dlen=STATUS_ONLINE;
 
agent.dlen = sizeof(PLUGIN)-1;
agent.msg = PLUGIN;
 
// Далее формирую заголовок и отправляю данные
 
int data=sizeof(login)+sizeof(pass)+sizeof(status)+sizeof(agent);
 
cout<<data;
mrim_packet_header_t packLogin2;//формирование пакета
packLogin2.magic=CS_MAGIC;      
packLogin2.proto=PROTO_VERSION;
packLogin2.seq=23;
packLogin2.msg=MRIM_CS_LOGIN2;
packLogin2.dlen=data;
packLogin2.from=0;
packLogin2.fromport = 2041;
 
send(servsocket,(char*)&packLogin2,sizeof(packLogin2),0);
send(servsocket,(char*)&login,sizeof(login),0);
send(servsocket,(char*)&pass,sizeof(pass),0);
send(servsocket,(char*)&status,sizeof(status),0);
send(servsocket,(char*)&agent,sizeof(agent),0);
 
////Принимаю ответ
mrim_packet_header_t answer2;
int len2 = recv (servsocket, (char*)&answer2, sizeof(answer), 0);
cout<<"SERVER RESPONSE="<<answer2.msg<<" "<<len2<<endl;
выдает что answer2.msg это 3435973836 , что никак не может быть ни
MRIM_CS_LOGIN_ACK 0х1004
MRIM_CS_LOGIN_REJ 0x1005

Добавлено через 6 минут
Да вообще при обращениях к любым свойствам answer2.dlen и т.д выдает этот ответ

Добавлено через 42 секунды
А длина полученных данных len2 = 0

Добавлено через 29 минут
Да и почему если я делаю так
C++
1
2
3
4
typedef struct {
    char msg[MAXBUF];
    unsigned short length;
} MsgBuf;
то при msguf.msg=MAIL

ругается что cannot convert from 'char [x]' to 'char [y]'
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.09.2009, 10:58
ты посылаешь структуры, а посылать надо массивы байтов

C++
1
2
3
4
5
send(servsocket,(char*)&packLogin2,sizeof(packLogin2),0);
send(servsocket,(char*)&login,sizeof(login),0);
send(servsocket,(char*)&pass,sizeof(pass),0);
send(servsocket,(char*)&status,sizeof(status),0);
send(servsocket,(char*)&agent,sizeof(agent),0);
то есть ты не сформировал ещё всё целиком, а уже посылаешь, сначала нужно сформировать все байты, касающиеся одной передачи отправить-принять, потом записать эти байты в буфер MsgBuf, проставить длину их (если у тебя буфер длиной тысяча, то надо для пяти байт, поставить длину пять)

и уже потом посылать эти данные из буфера
ты не посылаешь структуры, send всё равно в сокет пишет байты

Цитата Сообщение от gosha_kap
то при msguf.msg=MAIL
не знаю, что за MAIL, да и неважно, буфер заполняется функцией вроде memcpy
0
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 4
19.09.2009, 12:27  [ТС]
Т.е надо , грубо говоря , надо создать одну структуру , в потом заполнить её , а потом отправлять ...в один присест функцией send?

Добавлено через 1 час 18 минут
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
struct packlogin
{
    struct mrim_packet_header_t head;
    u_long UL_l;
    char login[18];
    u_long UL_p;
    char* pass;
    u_long UL_s;
    u_long UL_a;
    char* agent;
}packlogin;
 
packlogin.head.magic=CS_MAGIC;
packlogin.head.proto=PROTO_VERSION;
packlogin.head.seq=3;
packlogin.head.msg=MRIM_CS_LOGIN2;
packlogin.head.dlen=28;
packlogin.head.from=0;
packlogin.head.fromport=2041;
packlogin.UL_l=sizeof(MAIL)-1;
packlogin.login=*MAIL;
packlogin.UL_p=sizeof(PASS)-1;
packlogin.pass=PASS;
packlogin.UL_s=STATUS_ONLINE;
packlogin.UL_a=sizeof(PLUGIN)-1;
packlogin.agent=PLUGIN;
 
//Где MAIL PASS PLUGIN -соответственно логин пароль название
буду дальше читать
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.09.2009, 09:06
серверу всё равно по частям приходит или всё сразу

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* WriteSocket:  выводит сообщение из pBuffer в sockd */
int WriteSocket(void *pBuffer, int sockd)
{
    MsgBuf *bp;
    int n;
    
    if ((bp = pBuffer) == NULL)
        return EOF;
    if ((n = write(
                sockd,
                bp->msg,
                bp->msgSize
            )) != bp->msgSize)
        return EOF;
    return bp->msgSize;
}
это функция на основе write, а send тоже
C
1
int send(int s, const void *msg, size_t len, int flags);
не парится насчёт структур - значит подойдёт

можно вообще сделать сперва
C
1
2
3
4
5
6
7
8
9
10
11
12
    MsgBuf t = {
        {
            0xFF, 0xFF, 0xFF, 0xFF,
            0xFF, 0xFF, 0xFF, 0xFF,
            0xFF, 0xFF, 0xFF, 0xFF,
            0xFF, 0xFF, 0xFF, 0xFF,
            0xFF, 0xFF, 0xFF, 0xFF
        },
        20
    };
 
    WriteSocket(&t, sockd);
понимаешь да, в чём прикол ? то есть ты формируешь сначала вообще вручную, что у тебя должно получиться для отправки, потом это отправляешь, читаешь ответ тоже в буфер, потом ответ разбираешь

тут собственный пример, как всё работает, когда все интерфейсы уже построены

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
#include <stdio.h>
#include "connection.h"
#include "buffer.h"
 
main()
{
    CONN *pConn;
    MsgBuf rb;
    
    const char addr[] = "station";
    const int port = 80;
    const char request[] =
        "GET / HTTP/1.1"
        "\n"
        "host: station"
        "\n"        
        "\n";
    
    if ((pConn = CreateConnection(addr, port)) == NULL)
        return 1;
    
    printf(
        "Connected..."
        "\n"
    );
    
    TransactFileConnection(NULL, request, pConn);
    
    DestroyConnection(pConn);
    return 0;
}

запрашивает страницу и ответ выводит на NULL (это значит на stdout)
это построено на MsgBuf'ах, они спрятаны внутрях
это почищенная (типы приведены к единой форме, лишние буферы убраны)

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
#include <stdio.h>
#include "connect.h"
#include "buffer.h"
 
/* подключается к узлу, посылает сообщение и выводит ответ */
main()
{
    HostConn *pCon;
    
    if ((pCon = CreateConnect("station", 25)) == NULL)
        return 1;
    
    printf(
        "Connected..."
        "\n"
    );
    
    TransFileConnect(
        stdout,
        "EHLO x"
        "\n"
        "quit"
        "\n",
        pCon
    );
    
    DestroyConnect(pCon);
    return 0;
}

и ответ к ней

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[guest@station client]$ ./client
Connected...
220 station.domain ESMTP Sendmail 8.14.1/8.14.1; Sun, 20 Sep 2009 16:04:39 GMT
250-station.domain Hello station.domain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP
221 2.0.0 station.domain closing connection
[guest@station client]$
0
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 4
20.09.2009, 14:39  [ТС]
Ух...авторизовался....
Сейчас буду пробовать отправить сообщение =)
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
02.12.2009, 22:27
Здравствуйте! Я столкнулась почти с такой же проблемой, как в заголовке темы.
Описываю суть: есть две части одной программы (они разделены в потоках), 1-я половина читает данные с сетевой карты (пользуюсь сырыми сокетами), а вторая должна отправлять данные. Вот с этим-то и проблема! Функция connect проходит на "ура" (коннектиться получается), а данные не отправляются (send возвращает -1).
1) Почему это может происходить?
2) Я читала два разных мнения:
-что нельзя отправить данные, пользуясь сырыми сокетами (это по-просту не получится)
-и наоборот, что данные должны отправляться.
В сети полно примеров с использованием потоковых сокетов, но при использовании их данные даже не читались.
Надеюсь на вашу поддержку! Буду благодарна за любую помощь. Код отправки данных на всякий случай прилагаю (ОС WinXP, компилятор С++ Builder 6.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
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
 
#include "Sniff.h"
#include "Spuf.h"
#include "Unit1.h"
 
 
#pragma package(smart_init)
//---------------------------------------------------------------------------
 
//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall Spuf::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
 
__fastcall Spuf::Spuf(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Spuf::Execute()
{
        //---- Place thread code here ----
 
WSADATA        WSAData;
SOCKET         write;
char           PCname[128]; // Имя хоста (компьютера).
HOSTENT        *host;       // Информация о хосте.
SOCKADDR_IN    saddr;       // Адрес хоста
//IN_ADDR        sa1; //
//unsigned long  flag = 1;    // Флаг PROMISC Вкл/выкл.
tcp_hdr        tcp;
udp_hdr        udp;
ip_hdr         ip;
protoent       *pe;
servent        *se;
char           srt[10];
char           dest2[10];
char           ds[15];
unsigned short lowbyte;
unsigned short hibyte;
int            SendFiles;
AnsiString     filename;
FILE           *fp;
pe = new protoent;
se = new servent;
 
 
BYTE *buf;
IPHeader *buf_ip = new IPHeader;
buf= (BYTE*)buf_ip;
 
int len=sizeof(IPHeader)+10;
// пакет, который мы будем посылать
buf_ip->iph_verlen=5;
buf_ip->iph_ver=4; //5
buf_ip->iph_tos=0;
buf_ip->iph_length=htons(sizeof(IPHeader));
buf_ip->iph_id=htons(0x666);
buf_ip->iph_ttl=65; //255
buf_ip->iph_offset=0;
buf_ip->iph_protocol=255; //IPPROTO_TCP
buf_ip->iph_src=inet_addr("192.168.2.71"); //получаетел
buf_ip->iph_dest=inet_addr("192.168.2.55");//отправитель
buf_ip->iph_xsum=0;
 
// 1) Инициализация WS2_32
        int result=WSAStartup(MAKEWORD(2,2), &WSAData);
        if (result!=NO_ERROR) Form1->Memo1->Lines->Add("Error WSAStartup");
        Form1->Label4->Caption="1) WSAStartip...OK";
 
//2) сокет
        write = socket( AF_INET, SOCK_RAW, IPPROTO_IP);
        if (write==INVALID_SOCKET)
    {
        ShowMessage("Error socket");
                Form1->Memo1->Lines->Add(WSAGetLastError());
        WSACleanup();
    }
        Form1->Label5->Caption="2) soket()...OK";
 
//3) ПК
gethostname(PCname, sizeof(PCname));      //получаем имя ПК
host = gethostbyname(PCname);          //узнаем IP адрес ПК
ZeroMemory( &saddr, sizeof(saddr) );
 
//запрещаем создавать IP заголовки
DWORD optval = 1;
if ( setsockopt(write, IPPROTO_IP, IP_HDRINCL,(char*)&optval, sizeof(optval)) == SOCKET_ERROR )
{
    Form1->Memo2->Lines->Add("ERROR:setsockopt(IP_HDRINCL) error");
}
 
//4) создание порта для сокета
        saddr.sin_family=AF_INET;
        //saddr.sin_addr.s_addr = ((struct in_addr *)host->h_addr_list[0])->s_addr;
        saddr.sin_addr.S_un.S_addr=((struct in_addr *)host->h_addr_list[0])->s_addr;
        saddr.sin_port=htons(80);
 
 
 
//5) устанавливаем соединение
        if (connect(write, (SOCKADDR*)&saddr, sizeof(saddr))==SOCKET_ERROR)
        {
                Form1->Memo2->Lines->Add("Error connect");
                WSACleanup();
        }
        else Form1->Memo2->Lines->Add("connect... ok");
 
//Бесконечный цикл отправки IP пакетов
        while (true)
        {
                for(int i=1; i<=Form1->StringGrid2->RowCount; i++) //кол-во файлов=кол-ву строк
                {
                        Form1->StringGrid2->Cells[0][i]=IntToStr(i);
                        //filename=(Form1->StringGrid2->Cells[0][i]+".txt");
                        //fp = fopen(filename.c_str(),"r");
 
                        filename=("!.txt");
                        fp = fopen("!.txt","r");
                        char ch;// = getc(fp);   //чтение одного символа
 
                        while (ch!=EOF)
                        {
                                
                                ch = getc(fp);
                                Form1->Memo2->Lines->Add(ch);
                                Form1->Buffer2[i]=ch;
                        }
                        fclose(fp);
                        Form1->Memo2->Lines->Add(Form1->Buffer2);
                        if (Terminated) break;
                        if (SendFiles = send(write,Form1->Buffer2,sizeof(Form1->Buffer2),0)==SOCKET_ERROR) //а в буфере-то нет ничего!!!
                                Form1->Memo2->Lines->Add("Error send");
 
                        if (Terminated) break;
//дальше разбор отправляемого пакета                        
                        if (SendFiles>=sizeof(ip_hdr))
                        {
 
                        }
                fclose(fp);
                }//end for
        }//end while
 
        closesocket(write);
        WSACleanup();
   
}
//---------------------------------------------------------------------------
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.12.2009, 02:34
C++
1
if (SendFiles = send(write,Form1->Buffer2,sizeof(Form1->Buffer2),0)==SOCKET_ERROR)
операция == даёт ноль или один и это присваивается SendFiles

C++
1
2
//дальше разбор отправляемого пакета                        
                        if (SendFiles>=sizeof(ip_hdr))
судя по всему, проверяется, сколько байт отправилось, а при успешной отправке там будет ноль
и, похоже, она даже не дойдёт до туда

C++
1
    send(write,Form1->Buffer2,sizeof(Form1->Buffer2),0)
C++
1
2
3
4
5
    int n;
 
    n = send(write, "something", 9, 0);
 
    cout << n;
если после скобок не попрёт, проверишь, закомментировав
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
05.12.2009, 23:19
Не заработало
Может быть, сырые сокеты не позволяют выполнить отправку данных?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.12.2009, 08:49
не, они позволяют, только там надо, вроде, пакет вручную собирать
у меня по udp отправилось (без сборки), но за bind ить и принять не получилось
хотя в нете пишут, что за bind ить можно
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
21.12.2009, 10:16
все заработало! данные передаются!
хочу попробовать сделать то же самое с использованием winpсap. столкнулась с такой ошибкой в файле types.h: error Make sure bool, true and false are defined even when using the C compiler. Почему она может возникать? Драйвер скачан, все программы поставлены.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.12.2009, 11:59
в C подключить stdbool.h
лучше, конечно, писать в одном языке

C++
1
IPHeader *buf_ip = new IPHeader;
строчка для C++

C
1
fp = fopen("!.txt","r");
строчка для C

там и правила написания различаются
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2009, 11:59
Помогаю со студенческими работами здесь

Не могу отправить данные при нажатии на кнопку
Всех приветствую! Только начал освоение HTML и возникла следующая проблема: никак не могу отправить данные на сервер(некий промышленный...

В массив выводить данные-id клиента, данные серверу и данные, отправленные сервером
Здравствуйте. Имеется клиент-серверное приложение, вопрос по стороне сервера. Имеется backgroundworker-bw_clientReceining: ...

Отправить команды серверу
Надо кодом(PHP) отправить серверу на исполнение несколько команд. Делаю так: $output = popen(&quot;killall Xvnc&quot;,...

Отправить команды серверу
Надо кодом(PHP) отправить серверу на исполнение несколько команд. Делаю так: $output = popen(&quot;killall Xvnc&quot;,...

Отправить серверу строчку
Нужно отправить серверу строчку - 12 00 d4 02 38 36 38 32 30 34 30 30 31 37 38 32 36 30 35 0e 43 b6 Попытался сделать так: ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru