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

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

26.07.2011, 23:30. Показов 2514. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru