Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ActiveQt + Excel. Перенос Chart на другой лист C/C++
Доброго времени суток. Пишу программу для переноса данных из текстового файла в Excel. Возникла проблема с графиками. При создании нового графика создается новый лист. Как перенести график на... Ответили на другом форуме.
C/C++ Вывод на экран информации о жестком диске Доброго времени суток, товарищи. Заранее прошу прощения если не в том разделе пишу, но вопрос такой: нужно написать программы которая выведет информацию об установленном в системе жестком диске (под... Андрей147 //------------------------------------------------------------------------------ #include <sstream> #include <Wbemcli.h> #include <string>... https://www.cyberforum.ru/ c-cpp/ thread1937564.html
C/C++ Ошибка 0x80020009 через несколько секунд после запуска из своей программы Excel 2016 (подписка Office 365) При помощи Excel программа формирует файлы с данными. Все работает нормально. Однако, на машине с Excel 2016 (подписка Office 365) во время формирования файла (через несколько секунд после начала... https://www.cyberforum.ru/ c-cpp/ thread1923886.html Как получить id оборудования из библиотеки CEnumerateSerial? C/C++
Всем доброго утра. Использую библиотеку CEnumerateSerial для сканироания ком портов. Все нормально выводит. Однако хотелось бы получить также ИД оборудования? Никто не знает как это сделать?
C/C++ Запись строки в doc через CLSID Доброго времени суток. Как с помощью clsid записать в doc текст. Вот как производится открытие : HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int... hoteng, я бы начал с того что написал то что нужно в VBA - потом просто перенес на C++ https://www.cyberforum.ru/ c-cpp/ thread1934658.html C/C++ Работа с pdf https://www.cyberforum.ru/ c-cpp/ thread1978351.html
Здраствуйте, такая проблема, подключил я значит компонент AcroPDF, через ActiveX, чтобы работать с пдф файлами в своем приложении. Все отлично работает, но мне необходимо отключить всплывающее меню...
C/C++ Чё за ошибка? 113 35 [Error] 'IUnknown' is ambigouous base of 'CA'
Я уже с ума скоро сойду хД. Я пишу одно и то же 30-й раз,компилятор мне выводит в разное время разные ошибки. Как библиотеку c "IUnknown" подключаю,вообще конец. То фу-я не экспортируется.... /*...
C/C++ Пользуются ли midl? Приходится с ним иметь дело или никто уже не пользуется(или вообще никогда не пользовались?)? Если разрабатываешь компоненты COM или пишешь приложения, которые общаются между собой по RPC, то без MIDL никуда. https://www.cyberforum.ru/ c-cpp/ thread1962504.html
C/C++ Excel, шрифт, цвет шрифта, цвет фона ячейки и прочие свойства ячейки
Доброго времени суток. Пишу программу для редактирования .xlsx файла на visual c++. Благодаря примерам кода от vxg на этом форуме разобрался почти со всеми интересующими вопросами, кроме получения и... Mursilaga, вспомогательный код #define BREAK_ON_FAIL(x) if (FAILED(hr = x)) break; HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp,LPOLESTR ptName, int cArgs...) { ...
C/C++ C++ Builder OLE исключения Считываю в цикле из .xls файла содержимое ячеек в вектор, предварительно преобразовывая в тип float. Файл .xls будет всегда новый и я не могу указать кол-во шагов цикла. Когда доходит до пустой... Не надо тут никаких исключений: // ... double value; if(TryStrToFloat(h, value)) A = value; else break; https://www.cyberforum.ru/ c-cpp/ thread1959329.html
C++, visual studio 2017, открытие xls файлов C/C++
Как открывать xls файлы с помощью visual с++ 2017 и читать/записывать значения ячеек? Просьба привести пример кода, скинуть статью или посоветовать умную книгу Был здесь:... http://www.libxl.com/
C/C++ Рекомендуемая литература и статьи (нужно подключить код на C++ к VBA) У меня есть код, написанный на C++, содержащий классы. Нужно, чтобы я мог на VBA Excel создавать и использовать объекты классов, реализованных на C++. Гугл подсказал, что это можно сделать... То, что ты пытаешься сделать, достаточно непросто. Особенно если раньше никогда не имел дела с технологией COM. Я бы посоветовал следующее: 1. Прочесть одну-две книжки про COM/OLE/ActiveX.... https://www.cyberforum.ru/ c-cpp/ thread1934891.html
2 / 2 / 1
Регистрация: 10.11.2016
Сообщений: 94
0

Циклическое чтение информации через RS232 с использованием goto - C/C++ - Ответ 10432170

13.05.2017, 20:21. Показов 2854. Ответов 18
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Перейду сразу к делу, есть два фотоприемника (ФП), которые считывают данные при засветки их лазером. Оба ФП подключены к блоку управления, тот в свою очередь подключается к ПК по Com порту. Задача импульсно в течении определенного времени считывать данные с ФП и передавать через Com порт и записывать в массив данных.

Сам процесс считывания уже реализован, но по всей видимости неверно. Есть так же уже реализованное ПО для той же самой задачи но на Cи, нужно переписать функцию для С++ либо написать свою.
Я попробовал написать свою и столкнулся с проблемой использования так называемых "меток" и оператора goto. Зачем, собственно, использовать те самые метки. Отвечаю - обмен данными через ком порт идет следующим образом: с ПК отсылается байт из 9 битов, в ответ приходит такой же байт но с измененными (если это нужно) данными. А оператор goto нужен для того чтобы постоянно отправлять байты, до тех пор пока блок не откликнется прислав в ответном байте измененный бит (8 бит), это даст нам понять что он готов передать данные, потом отправляем ему пустой байт по определенному адресу (0xdb) и в ответ прилетает такой же байт, но с нужными данными, затем работа устройства повторяется указанное пользователем время и количество замера данных.

Основная проблема в том, что я, как новичек, не совсем понимаю как работать с goto, а обычный цикл здесь не воспринимается устройством (мы зависим от его быстродействия), ну и в уже работающей программе на Си как раз используются эти "метки".

Прошу помощи в выявлении ошибок в коде, на основании логов (во вложенных файлах - логи обмена данными по RS232 во время проведения эксперимента) Write и Read логов записанных в порт и считанных с него соответственно.
А так же прилагаю код правильной и рабочей реализации этой задачи на Си и неправильно работающий код на С++.

Рабочий код на Си:
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
char YesStop=0;
char SSS[80];
 
unsigned Ready;
int W;
 
Ready=1;
 
byte Cur_Count;
 
BOOL Read_ADC_Expos(int *Data_ADC_1,int *Data_ADC_2 )
{
 
int W;
byte Ready;
 
loop:
if (YesStop) return TRUE;
 
Write_Data[0]=0x81; // читаем тек счетчик и сравниваем c Cur_Count
Write_Data[1]=0;
Write_Data[2]=0xd6;
Write_Data[3]=0;
Write_Data[4]=0;
Write_Data[5]=0;
Write_Data[6]=1;
 
if (!Send_Pack(Write_Data,Read_Data)) return FALSE;
 
Ready = Read_Data[6];
 
if (Ready!=Cur_Count)  //  можно считывать данные  
{
Cur_Count=Ready;
 
Write_Data[0]=0xe1; // читаем
Write_Data[1]=0;
Write_Data[2]=0xdb;
Write_Data[3]=0;
Write_Data[4]=0;
Write_Data[5]=0;
Write_Data[6]=0;
 
if (!Send_Pack(Write_Data,Read_Data)) return FALSE;
 
W=Read_Data[5];
W&=0x0f;
W<<=8; 
 
W+=Read_Data[6];
*Data_ADC_2 = (int)(((double)W - BSig)/(ASig-BSig)*4000);
 
W=Read_Data[3];
W&=0x0f;
W<<=8; 
 
W+=Read_Data[4];
 
*Data_ADC_1 = (int)(((double)W - BRef)/(ARef-BRef)*4000); 
 
sprintf(SSS," ADC_1 = %d ADC_2 = %d ",*Data_ADC_1,*Data_ADC_2);
 
WriteLog(SSS);
 
return TRUE;
}
 
else // Ready = Cur_Count
{
if (YesStop) return TRUE; 
 
goto loop;
}
 
}
 
 
BOOL White_End_Pause(byte *Cur_Count)
{
 
int W;
byte Ready;
 
loop:
 
if (YesStop) return TRUE;
 
Write_Data[0]=0x81; // читаем тек счетчик и сравниваем c Cur_Count
Write_Data[1]=0;
Write_Data[2]=0xd6;
Write_Data[3]=0;
Write_Data[4]=0;
Write_Data[5]=0;
Write_Data[6]=1;
 
if (!Send_Pack(Write_Data,Read_Data)) return FALSE;
 
Ready = Read_Data[6];
 
if (Ready==*Cur_Count) 
{
 
//----------------------------------------------- надо ли что то делать 
 
goto loop;    //  можно считывать данные  
 
 
}
 
else // Ready! = Cur_Count
{
 
*Cur_Count=Ready;
    
    return TRUE; 
 
}
 
}
Не рабочий код на плюсах с указанием до какого момента работает, а с какой строки уже нет:
C++ (Qt)
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
QByteArray TabWindow::setDelay(unsigned char adress, unsigned short delay) //функция формирования байтов задержки
{
    unsigned char sixb, sevenb;
    sixb=(delay>>8)&0xff;
    sevenb=(delay&0xff);
    QByteArray resDelay;
    resDelay.resize(9);
    resDelay[0] = 0x55;
    resDelay[1] = 0x21;
    resDelay[2] = 0;
    resDelay[3] = adress;
    resDelay[4] = 0;
    resDelay[5] = 0;
    resDelay[6] = sixb;
    resDelay[7] = sevenb;
    resDelay[8] = resDelay[1];
    for (int i=2; i<8; i++)
        resDelay[8]=resDelay[8]+resDelay[i];
    return resDelay;
}
 
 
void TabWindow::on_expButton_clicked() //функция эксперимента
{
    //открытие и установка параметром Com порта
    com1->open(QIODevice::ReadWrite);
    com1->setFlowControl(QSerialPort::NoFlowControl);
    com1->setBaudRate(QSerialPort::Baud115200);
    com1->setStopBits(QSerialPort::OneStop);
    com1->setDataBits(QSerialPort::Data8);
    com1->setDataTerminalReady(false);
    com1->clear();
 
    //считывание параметров задержки из главного окна программы
    zad1in=ui->zad1LE->text().toInt();
    zad2in=ui->zad2LE->text().toInt();
    zad3in=ui->zad3LE->text().toInt();
    expTime=2*ui->expTimeLE->text().toInt();
 
    //выделение и изменение размера переменных массивов 
    wdelay1.resize(9);
    wdelay2.resize(9);
    wdelay3.resize(9);
 
    testRes1.resize(9);
    testRes2.resize(9);
    testRes3.resize(9);
 
    //приминение функции формирования байтов задержки
    wdelay1=setDelay(0xDF, (unsigned short)zad1in);
    wdelay2=setDelay(0xE1, 3);
    wdelay3=setDelay(0xE3, (unsigned short)zad2in);
 
    //запись байтов задержки
    com1->write(wdelay1);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    testRes1 = com1->readAll();
 
    com1->write(wdelay2);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    testRes2 = com1->readAll();
 
    com1->write(wdelay3);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    testRes3 = com1->readAll();
    
    //создание байтов алгоритма эксперимента
    flagRes1.resize(9);
    flagRes2.resize(9);
 
    unsigned char sixbexp, sevenbexp;
    sixbexp=(expTime>>8)&0xff;
    sevenbexp=(expTime&0xff);
    flag1.resize(9);
    flag1[0]=0x55;
    flag1[1]=1;
    flag1[2]=1;
    flag1[3]=0x0d;
    flag1[4]=0;
    flag1[5]=0;
    flag1[6]=sixbexp;
    flag1[7]=sevenbexp;
    flag1[8]=flag1[1];
    for (int i=2; i<8; i++)
        flag1[8]=flag1[8]+flag1[i];
 
    unsigned char sixbp, sevenbp;
    sixbp=(zad3in>>8)&0xff;
    sevenbp=(zad3in&0xff);
    flag2.resize(9);
    flag2[0]=0x55;
    flag2[1]=1;
    flag2[2]=1;
    flag2[3]=0x21;
    flag2[4]=0;
    flag2[5]=0;
    flag2[6]=sixbp;
    flag2[7]=sevenbp;
    flag2[8]=flag2[1];
    for (int i=2; i<8; i++)
        flag2[8]=flag2[8]+flag2[i];
 
    //запись флагов с параметрами эксперимента
    com1->write(flag1);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    flagRes1 = com1->readAll();
 
    com1->write(flag2);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    flagRes2 = com1->readAll();
 
    int N=expTime;
 
    expSignal.resize(1);
 
    //формирование байтов на считывание данных во время эксперимента
    //Experiment writepack 1
    expWrite1.resize(9);
    expWrite1[0] = 0x55;
    expWrite1[1] = 1;
    expWrite1[2] = 0;
    expWrite1[3] = 0xc2;
    expWrite1[4] = 0;
    expWrite1[5] = 0;
    expWrite1[6] = 0;
    expWrite1[7] = 1;
    expWrite1[8] = expWrite1[1];
    for (int i=2; i<8; i++)
        expWrite1[8]=expWrite1[8]+expWrite1[i];
 
    //Experiment writepack 2
    expWrite2.resize(9);
    expWrite2[0] = 0x55;
    expWrite2[1] = 0x81;
    expWrite2[2] = 0;
    expWrite2[3] = 0xc2;
    expWrite2[4] = 0;
    expWrite2[5] = 0;
    expWrite2[6] = 0;
    expWrite2[7] = 0;
    expWrite2[8] = expWrite2[1];
    for (int i=2; i<8; i++)
        expWrite2[8]=expWrite2[8]+expWrite2[i];
 
    //Experiment readpack 1
    expRead1.resize(9);
    expRead1[0] = 0x55;
    expRead1[1] = 0x81;
    expRead1[2] = 0;
    expRead1[3] = 0xD6;
    expRead1[4] = 0;
    expRead1[5] = 0;
    expRead1[6] = 0;
    expRead1[7] = 1;
    expRead1[8] = expRead1[1];
    for (int i=2; i<8; i++)
        expRead1[8]=expRead1[8]+expRead1[i];
 
    //Experiment readpack 2
    expRead2.resize(9);
    expRead2[0] = 0x55;
    expRead2[1] = 0xE1;
    expRead2[2] = 0;
    expRead2[3] = 0xDB;
    expRead2[4] = 0;
    expRead2[5] = 0;
    expRead2[6] = 0;
    expRead2[7] = 0;
    expRead2[8] = expRead2[1];
    for (int i=2; i<8; i++)
        expRead2[8]=expRead2[8]+expRead2[i];
 
 
    ARef = 4000;
    BRef = 0;
    ASig = 4000;
    BSig = 0;
    QFile adcFile("ADC data.csv");
 
 
    expResult.resize(9);
    expResultP.resize(9);
    
    //запись байтов по адресу 0xC2 для начала стадии считывания данных
    com1->write(expWrite1);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    expResult = com1->readAll();
 
    //с данной строки логи отправляемые и получаемые в ответ программой на С++ не совпадают с логами на Си 
    //ошибка где то ниже
    int count=0;
    expSignal[0]=count;
    while ((int)expSignal[0]<14)
    {
    com1->write(expWrite2);
    com1->waitForBytesWritten(50);
    com1->waitForReadyRead(50);
    expResult = com1->readAll();
    //expSignal[0]=count+1;
 
    //отправление байта для проверки можно ли проводить считывание по адресу 0хd6
    flag1:
    com1->write(expRead1);
    com1->waitForBytesWritten(100);
    com1->waitForReadyRead(100);
    expResultP = com1->readAll();
    expSignal[0] = expResultP[7];
    if ((int)expSignal[0]!=(int)expSignal[0]+1) goto flag1;
    else goto flag2;
 
    //если прошлый байт изменился в 8 бите на 1, считываем данные
    flag2:
    com1->write(expRead2);
    com1->waitForBytesWritten(100);
    com1->waitForReadyRead(100);
    expResult = com1->readAll();
 
    //операции преобразования полученных данных
    //Reading massive of data
 
        expRes1 = 0;
        expRes1 = expResult[4];
        expRes1 = expRes1 & 0xf;
        expRes1 = expRes1 << 8;
        expRes1 = expRes1 + expResult[5];
        expRes1 = (((double)expRes1 - BRef) / (ARef - BRef) * 4000);
 
        expRes2 = 0;
        expRes2 = expResult[6];
        expRes2 = expRes2 & 0xf;
        expRes2 = expRes2 << 8;
        expRes2 = expRes2 + expResult[7];
        expRes2 = (((double)expRes2 - BSig) / (ASig - BSig) * 4000);
 
        ADC1.resize(count+1);
        ADC2.resize(count+1);
        ADC1[count]=expRes1;
        ADC2[count]=expRes2;
        count++;
}
 
    //запись данных в файл
    //Recording data to file
         QTextStream out(&adcFile);
         if(adcFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
         {
             out<<"ADC1"<<';';
             out<<"ADC2"<<';'<<"\r\n";
 
             for (int i=0; i<N; i++)
             {
                 out.setRealNumberNotation(QTextStream::ScientificNotation);
                 out<<ADC1[i]<<';';
                 out<<ADC2[i]<<';'<<"\r\n";
             }
             adcFile.close();
         }
    //End of reading and recording data
         com1->clear();
         com1->close();
}
Логи write C++ и С.docx

Логи read C++ и С.docx

Вернуться к обсуждению:
Циклическое чтение информации через RS232 с использованием goto C/C++
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2017, 20:21
Готовые ответы и решения:

Чтение информации с весов через COM порт
Здравствуйте. Недавно начал изучать C++ и стоит такая задача. У меня есть программка, которая должна считывать вес через COM порт и...

Передача информации с ПК по RS232 на UART ATmega2313
Помогите разобраться с алгоритмом. Есть символьная строка информации, &quot;Привет123&quot;. Какой тип переменных (на с++) использовать для...

Циклическое чтение из файла
Доброго времени суток! Столкнулся с проблемой. К своему стыду не могу реализоавть простейший код в DEVC++ Суть: есть файл формата...

18
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2017, 20:21
Помогаю со студенческими работами здесь

Чтение данных с COM/RS232 порта
Стоят весы подключённые к компу через RS232. Кладём на весы продукт, весы &quot;устаканиваются&quot; и кидают вес в виде &quot;000.254&quot;...

Чтение из последовательного порта по протоколу RS232
Добрый день , собственно имеется такой вопрос, работаю с устройством , необходимо реализовать чтение данных из порта , сейчас чтение...

Циклическое чтение данных из нескольких файлов .txt
Здравствуйте, уважаемые форумчане. Подскажите пожалуйста по следующей проблеме, так в интернете похожего ничего не нашел. Задача: имеется...

Циклическое копирование файлов с использованием команды XCOPY
Здравствуйте. Я хочу скопировать определённые файлы из одной директории в другую. Имею такой bat-файл: REM @echo off SET...

Циклическое чтение системного времени и очистка экрана в заданный момент
Приветствую, поможете разобраться? Программа должна очищать экран в заданный момент, но это не происходит. Что не так?

0
Новые блоги и статьи
Пользуясь нейросетью возвращаюсь к вопросу альтернативных приводов поступательного движения.
Hrethgir 14.02.2025
Описание тут https:/ / habr. com/ ru/ articles/ 778118/ . Вопрос ответ You Привет. Скажи, есть-ли вещества, которые могут менять жидкое состояние на желеобразное под воздействием ультразвука? . . .
Ошибка "Another git process seems to be running in this repository"
hw_wired 14.02.2025
При работе с git можно столкнуться с довольно раздражающей ошибкой "Another git process seems to be running in this repository". Эта ситуация возникает, когда система контроля версий пытается. . .
Ошибка "java.lang.NoCl­assDefFou­ndErro­r: javax/xml/bind/JAXBException"
hw_wired 14.02.2025
Как разработчики Java-приложений, мы сталкиваемся с разными ошибками, но одна из них - java. lang. NoClassDefFoundError: javax/ xml/ bind/ JAXBException - стала особенно актуальной после выхода Java 9. . . .
Отличия for-in от for-of в JavaScript
hw_wired 14.02.2025
Когда-то единственным способом перебора элементов массива или свойств объекта был классический цикл for с счетчиком. Да, он отлично справлялся с задачей, но код получался громоздким и не очень. . .
Отличия implementation, api и compile в Gradle
hw_wired 14.02.2025
Управление зависимостями - одна из ключевых задач при разработке современных приложений на Java и Kotlin. Система сборки Gradle предоставляет гибкие и мощные средства для работы с зависимостями,. . .
Что лучше: require или import/export в JavaScript
hw_wired 14.02.2025
Модульность в JavaScript прошла долгий путь эволюции, и сегодня у разработчиков есть два основных способа организации модулей: старый добрый require из системы CommonJS и современные import/ export из. . .
Ошибка "Uncaught SyntaxError: Cannot use import statement outside a module"
hw_wired 14.02.2025
Думаю, многие разработчики сталкивались с ошибкой "Uncaught SyntaxError: Cannot use import statement outside a module" при попытке использовать современный синтаксис импорта в JavaScript. Эта. . .
Ошибка Docker "Got permission denied while trying to connect to the Docker daemon socket at"
hw_wired 14.02.2025
Разработка с использованием Docker может иногда преподносить неожиданные сюрпризы, и одним из самых распространенных камней преткновения становится ошибка с отказом в доступе к демону Docker. . . .
Ошибка "No 'Access-Control-Allow-Origin' header is present on the requested resource"
hw_wired 14.02.2025
При разработке современных веб-приложений нередко сталкиваешься с ошибкой "No 'Access-Control-Allow-Origin' header is present on the requested resource". Эта проблема возникает из-за политики. . .
Как закрыть порт в Linux
hw_wired 14.02.2025
Управление сетевыми портами в Linux - непростая, но важная задача для обеспечения безопасности системы. Каждый открытый порт - это потенциальная уязвимость, через которую злоумышленики могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru