Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 23:51   #1
ka-lenka
 
Регистрация: 26.07.2011
Сообщений: 4
По умолчанию Передача пакета

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

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

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

Мб кто-нить поможет или хотя бы есть примеры как это делать?
ka-lenka вне форума Ответить с цитированием
Старый 27.07.2011, 00:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

учитывая, что вы работаете поверх TCP/IP || UDP, то пакет есть просто набор данных.
самое просто это создать структуру нужного вам вида, её и отправить по сокету.

или у вас RAW-пакет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.07.2011, 07:19   #3
ka-lenka
 
Регистрация: 26.07.2011
Сообщений: 4
По умолчанию

У меня UDP...

но у меня не получается создать структуру... в том-то и дело((
ka-lenka вне форума Ответить с цитированием
Старый 27.07.2011, 12:28   #4
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

предлагаете нам установить телепатическое соединение?
alex_x_x вне форума Ответить с цитированием
Старый 27.07.2011, 13:25   #5
ka-lenka
 
Регистрация: 26.07.2011
Сообщений: 4
По умолчанию

ну вот что у меня получилось.... мб подскажете в чём ошибка?

Код:
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;



}
ka-lenka вне форума Ответить с цитированием
Старый 11.08.2011, 07:26   #6
ka-lenka
 
Регистрация: 26.07.2011
Сообщений: 4
По умолчанию

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

Код:
//создаём структуру нашего пакета
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);
  }
}
выдаёт ошибку:

Код:
[BCC32 Error] Запрос.cpp(217): E2285 Could not find a match for 'TIdUDPBase::SendBuffer(UnicodeString,int,paket *)'
Я так поняла он не может передать структуру, нужно структуру перевести в массив...

я пыталась сделать вот так:

Код:
TByteDynArray *tempPaket
tempPaket = (TByteDynArray *)zaprosIP;
//отправляем запрос
IdUDPServer1->SendBuffer(Edit1->Text,Edit2->Text.ToInt(),tempPaket);
но всё равно тоже самое... как правильно перевезти в массив?
ka-lenka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка пакета в Delphi 7 _-Re@l-_ Общие вопросы Delphi 9 02.06.2011 07:39
получение пакета Alexandr555 Работа с сетью в Delphi 2 26.03.2011 00:47
фрагментация IP пакета... Женя_88 C/C++ Сетевое программирование 8 15.11.2010 23:57
Изменение пакета Namolem Помощь студентам 4 02.06.2010 18:18
Отправка->Распаковка пакета Saxon Работа с сетью в Delphi 10 15.04.2007 20:56