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

Передача пакета

26.07.2011, 23:30. Показов 2554. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пишу программу на Билдере С++ 2010.
Программа должна делать примерно вот что:

Есть что-то IP адрес, моя программа посылает на него команду, чтоб узнать сколько устройств к этому адресу подключено. Команда выглядит в виде пакета: заголовок, 29 бит ID, длинна.
Программа посылает эту команду на данный адрес, а тот в ответ присылает информацию о подключенных устройствах в виде таких же пакетов.

Но я только начинаю в этом разбираться, как установить соединение я разобралась... а вот как создать пакет и отправить? Я пыталась создать структуру, но у меня так и не получилось((

Мб кто-нить поможет или хотя бы есть примеры как это делать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2011, 23:30
Ответы с готовыми решениями:

Передача пакета по протоколу ОВЕН через СОМ порт
задача такая. Я должна сделать скаду-систему контоля микроклимата. Т.е. я как пользователь, задаю параметры работы (т.е. устанавливаю мин...

Парсер IP пакета
Здравствуйте. Необходима помощь. Имеется программа которая с помощью функции pcap_loop разбивает файл xxx.pcap созданный в wireshark на...

Передача пакета по UDP
Помогите, пожалуйста, передать структуру данных с помощью компонентов Indy 9 IdUDPClient и IdUDPServer. Cледующий код не работает...

10
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
26.07.2011, 23:33
в массив char загоняй данные и отсылай этот массив...
более точно можно сказать, увидев документацию по протоколу на девайс
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.07.2011, 23:42
ka-lenka, думаю в разделе билдера вам быстрее помогут
0
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
27.07.2011, 13:23  [ТС]
ну вообще он выглядит примерно так:

заголовок: А3D0 01 ( обозначает сколько битов в ID) ID: 29 бит, в них содержится сама команда, длинна: 0

т.е. так прям в массив и вбивать? не разделяя заголовок от ID?

Добавлено через 13 часов 34 минуты
я пыталась создать структуру, вот что получилось:
Code
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
void __fastcall TForm1::Button1Click(TObject *Sender)
 
{
 
    Struct paket
 
    {
 
       short zagolovok;
 
       char dlinna;
 
       struct ID;
 
       char len;
 
       char hvost;
 
    }
 
    paket zapros1;
 
    zapros1.zagolovok = 0xA3D0;
 
    zapros1.dlinna = 01;
 
    zapros1.ID= 00000000000000000000000000011;
 
    zapros1.len=0;
 
    zapros1.hvost=0;
 
 
 
}

канечно же выдаёт ошибки.... как их исправить?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.07.2011, 13:35
Цитата Сообщение от ka-lenka Посмотреть сообщение
канечно же выдаёт ошибки.... как их исправить?
открыть учебник и изучить синтаксис языка программирования на которм вы программируете
Добавлено через 40 секунд
а тьху, вы ж не программируете, вы формочки клепаете, извините
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
27.07.2011, 17:41
А какие хоть ошибки??
И что ты здесь
zapros1.ID=
0000000000000000000000000
0011;
делаешь?
Как я понимаю ты здесь пишешь не бинарное число а обычное - тут может быть ошибка так как оно очень длинное.
И поле ID у тебя объявлено как структура - покажи ее код.
1
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
27.07.2011, 21:19  [ТС]
Ошибку выдаёт в строчке

Code
1
paket zapros1;
Типо не правильный синтаксис...

а с ID... мне надо вбить в него 29 бит: 00000000000000000000000000011
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
27.07.2011, 22:20
Попробуй описание структуры заменить на такое:
C++
1
2
3
4
5
6
7
8
typedef struct paket
{
short zagolovok;
char dlinna;
struct ID;
char len;
char hvost;
}
на самом деле ты записываешь не последовательность из 29 бит а число из 29 цифр. В таком случае нужно явно указывать что число в бинарной форме:
C++
1
zapros1.ID=0000000000000000000000000011b;
Добавлено через 15 минут
И еще:
на самом деле твой ID будет занимать 32 бита если тип поля DWORD. Но опять же у тебя поле ID объявлено как структура! И я не уверен что именно так можно делать.
Если же все же нужно именно 29 бит то почитай про битовые поля в структуре.
1
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
28.07.2011, 16:33  [ТС]
Спасибо!!!
В принципе в виде структуры ID, я думаю мб тогда проще сделать массив

Добавлено через 9 часов 37 минут
В общем вот что получилось:

Code
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
typedef struct paket
 
    {
 
       short zagolovok;
 
       char dlinna[2];
 
       char ID[29];
 
       char len;
 
       char hvost[8];
 
    }
 
 
 
    paket zapros1;   //4 ошибка
 
    zapros1.zagolovok = 0xA3D0;   //3 ошибка
 
 
 
    zapros1.dlinna[0] = 0;
 
    zapros1.dlinna[1] = 1;
 
    for (i = 0; i < 2; i++) {
 
 
 
 
 
    zapros1.ID[i]= 1;
 
    }
 
    for (i = 2; i < 29; i++) {
 
       zapros1.ID[i]= 0;
 
    }
 
    zapros1.len=0;
 
    for (i = 0; i < 8; i++) {
 
 
 
      zapros1.hvost[i]=0;
 
    }
 
 
 
 IdUDPServer1->SendBuffer("127.0.0.1", 5009, paket);   // 1 и 2 ошибки
Всё равно вылезают ошибки:


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
1) [BCC32 Error] Запрос.cpp(85): E2108 Improper use of typedef 'paket'
 
 
 
    2) [BCC32 Error] Запрос.cpp(85): E2285 Could not find a match for 'TIdUDPBase::SendBuffer(const char *,int,undefined)'
 
  
 
  3) [BCC32 Error] Запрос.cpp(67): E2451 Undefined symbol 'zapros1'
 
 
 
  4) [BCC32 Error] Запрос.cpp(66): E2257 , expected
Как можно их исправить?
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
28.07.2011, 17:54
Я не уверен правильно ли - так как проверить нет возможности
C++
1
2
3
4
5
6
7
8
typedef struct paket
{
short zagolovok;
short dlinna;
DWORD ID;
char len;
char hvost[8];
}paket;
char[29] это массив из 29 символов который занимает 29 байт НЕ БИТ!
DWORD это тоже самое что и unsigned int и занимает 4 байта т.е. 32 бита - чуть больше чем тебе нужно.

Добавлено через 24 минуты
Ну а заполнение полей структуры можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
paket zapros1;
zapros1.zagolovok = 0xA3D0;
zapros1.dlinna = 1;
zapros1.ID = 11b;
/* можно и так 
zapros1.ID = 3;
здесь мы задаем значение обычным числом */
zapros1.len=0;
zapros1.hvost=0;
//я не знаю что ты здесь заполняешь
IdUDPServer1->SendBuffer
("127.0.0.1",5009,ToByte(zapros1));
1
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
10.08.2011, 17:50  [ТС]
Спасибо!!!

ещё такой вопрос... вот я создала массив, пытаюсь его передать... и выдаёт ошибку...

Code
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
//создаём структуру нашего пакета
struct paket
    {
       short zagolovok;
       char dlinna;
       unsigned int KodKom:4;
       unsigned int TipLine:2;
       unsigned int TipYstr:3;
       unsigned int NYstr:8;
       unsigned int adrMesto:3;
       unsigned int adrPlat:4;
       unsigned int adrBox:5;
       unsigned int rezerv:3;
       unsigned char len;
       unsigned char RabYstr:1;
       unsigned char EEPROM:1;
       unsigned char BY:1;
       unsigned char IPadr:1;
       unsigned char Podkl:1;
       unsigned char rez:3;
    } ;
    paket *otvet;
    paket *zaprosIP;
    
    ...
    
    void __fastcall TForm1::Button4Click(TObject *Sender)
{ // формируем запрос IP адреса для плат
 
  for (i = 0; i < (AdrPl->count); i++) {
  zaprosIP->zagolovok=0xA3D0;
  zaprosIP->dlinna=1;
  zaprosIP->KodKom=ZaprIP;
  zaprosIP->TipLine=0;
  zaprosIP->TipYstr=0;
  zaprosIP->NYstr=0;
  zaprosIP->adrMesto=0;
  zaprosIP->adrPlat=(AdrPl->Plata[i]);
  zaprosIP->adrBox=0;
  zaprosIP->rezerv=0;
  zaprosIP->len=0;
  zaprosIP->RabYstr=0;
  zaprosIP->EEPROM=0;
  zaprosIP->BY=0;
  zaprosIP->IPadr=0;
  zaprosIP->Podkl=0;
  zaprosIP->rez=0;
 
  //отправляем запрос
  IdUDPServer1->SendBuffer(Edit1->Text,Edit2->Text.ToInt(),zaprosIP);
  }
}
выдаёт ошибку:
Code
1
[BCC32 Error] Запрос.cpp(217): E2285 Could not find a match for 'TIdUDPBase::SendBuffer(UnicodeString,int,paket *)'
Я так поняла он не может передать структуру, нужно структуру перевести в массив...

я пыталась сделать вот так:
Code
1
2
3
4
TByteDynArray *tempPaket
tempPaket = (TByteDynArray *)zaprosIP;
//отправляем запрос
IdUDPServer1->SendBuffer(Edit1->Text,Edit2->Text.ToInt(),tempPaket);
но всё равно тоже самое... как правильно перевезти в массив?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2011, 17:50
Помогаю со студенческими работами здесь

Передача пакета устройству
Здравствуйте. Простите за банальный вопрос, но объясните пожалуйста или киньте ссылку на подробный мануал, как происходит передача пакета...

Передача пакета из одной подсети в другую
Есть 2 клиента в разных сетях, есть сервер который передает адреса. как можно установить соединение между клиентами. Получается...

Передача пакета данных TCP через интернет
Доброе время суток!:) Я студент, пишу дипломную работу по передачи данных используя стек протоколов TCP/IP. У меня получилось...

STM32 USART-RS485 передача пакета данных
Приветствую всех! Подскажите пожалуйста по следующему вопросу: Передаю байт ПК -&gt; STM32, по схеме ПК-&gt;USB/RS485 - драйвер...

Асинхронная передача пакета по UART (пакет больше FIFO) TM4C1294
Здравствуйте. Плата Tiva C Series TM4C1294 с контроллером: TM4C1294NCPDT. Необходимо управлять четырьмя приводами одновременно, для этого...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru