Конференция "Сети" » КАК ПОМЕСТИТЬ З ПАРАМЕТРА В ПАКЕТ ???
 
  • Inovet © (09.10.13 16:46) [20]
    > [18] west19   (09.10.13 15:33)
    > где №4,5 байта это то что мы вводим в эви4

    Важно в каком порядке эти два байта. Ну допустим так


    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //...
     union TBuf
     {
       unsigned char b[5];
       struct
       {
         unsigned char d1;
         unsigned char d2;
         unsigned char d3;
         unsigned short d4;
       }
    ;
     } buf;

     buf.d1 = 0;
     buf.d2 = StrToInt(Edit2->Text);
     buf.d3 = StrToInt(Edit3->Text);
     buf.d4 = StrToInt(Edit4->Text);
    //...
    }


    А передавать будешь
    buf.b
  • Inovet © (09.10.13 16:50) [21]
    > [19] west19   (09.10.13 16:40)
    > 4 байт старший,а 5 младший

    Ну можно специально перевернуть при необходимости, здесь не надо.
  • west19 (09.10.13 17:13) [22]
    попробывал как ты говришь,вот глянь правильно написал ?
    http://rghost.ru/49271154
    прога запускается без ошибок но ничего не отправляет
  • west19 (09.10.13 17:24) [23]
    я нашёл в чем у меня была ошибка)
  • west19 (09.10.13 17:28) [24]
    но он не отправляет то что мы вводим в последний эдит
    Не поможешь и тут
    значение №4,5 байта это то что мы вводим в эдит 3 - и это состоит из двух  байт
    4 байт старший,а 5 младший
  • Inovet © (09.10.13 17:33) [25]
    Да, там ещё надо добавить в начале

    #pragma pack(1)


    и перевернуть таки байты старший младший.

    ну можно и просто в массив писать

     unsigned char buf[5];

     buf[0] = 0;
     buf[1] = StrToInt(Edit2->Text);
     buf[2] = StrToInt(Edit3->Text);
     unsigned int t = StrToInt(Edit4->Text);
     buf[3] = t >> 8;
     buf[4] = t & 0xff;

  • west19 (10.10.13 10:52) [26]
    спасиб,помог очень
  • west19 (10.10.13 10:56) [27]
    Но у меня возник ещё один вопрос: если я ввожу в эдит4 число,которое меньше чем два байта(например ввожу ему 240),то он с него ничего не отсылает, хотя должен отправить старший байт (00) и младший (F0) .Как это исправить?
  • Inovet © (10.10.13 11:39) [28]
    > [0] west19   (08.10.13 15:21)
    > iKount = sendto(s, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));

    Наверное

    strlen(tBuf)


    надо заменить на

    sizeof(tBuf) / sizeof(tBuf[0])


    ?
  • west19 (10.10.13 13:02) [29]
    нет  не помогло...
  • Inovet © (10.10.13 13:37) [30]
    Что за функция sendto? Смотри её правильные параметры в справке.
  • west19 (10.10.13 13:39) [31]
    function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr; tolen: Integer): Integer;
    Первый параметр данной функции задаёт сокет, который служит для передачи данных. Здесь нужно указать значение, полученное ранее от функции

    socket
    . Параметр
    Buf
    задаёт буфер, в котором хранятся данные для отправки, а параметр
    len
    — размер этих данных в байтах. Параметр
    flags
    позволяет указать некоторые дополнительные опции, которых мы здесь касаться не будем, т.к. в большинстве случаев они не нужны. Пока следует запомнить, что параметр
    flags
    в функции
    sendto
    , а также в других функциях, где он встречается, должен быть равен нулю. Параметр
    addrto
    задает адрес (состоящий из IP-адреса и порта) удаленного сокета, который должен получить эти данные.
  • west19 (10.10.13 13:41) [32]
    вот у меня
    iKount = sendto(s, buf, strlen(buf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));
  • west19 (10.10.13 13:43) [33]
    та всёработает норм,но если мне надо с эдита4 отправить 1 байтовое значение,то с него ничего не отправляется отправляется с эдита2 и эдита3,а в эит 4 как будто ничего не вводил,если там число меньше 255
  • Inovet © (10.10.13 14:02) [34]
    Прототип точно скопируй, той функции которой пользуешься в Си++.
  • west19 (10.10.13 14:23) [35]
    а чем тееб этот прототип не нравится?
  • west19 (10.10.13 14:29) [36]
    я уже и так пробывал
    buf[0] = 0x10;
    buf[1] = (int)2*StrToFloat(Edit2->Text);
    buf[2] = (int)2*StrToFloat(Edit3->Text);
    buf[3] = ((int)2*StrToFloat(Edit4->Text))/256;
    buf[4] = (int)2*StrToFloat(Edit4->Text);
  • west19 (10.10.13 14:29) [37]
    всё равно не помогло...
  • west19 (10.10.13 15:19) [38]
    всё разобрался,спасиб
  • Inovet © (10.10.13 15:23) [39]
    В массив всё правильно сохраняется, можешь по дебагером проверить. Передаёшь неправильно.
 
Конференция "Сети" » КАК ПОМЕСТИТЬ З ПАРАМЕТРА В ПАКЕТ ???
Есть новые Нет новых   [120572   +211][b:0][p:0.002]