Библиотека UIPEthernet - передача разных типов данных

Я купил себе модуль ENC28J60 и разбираюсь с передачей данных по UDP. Использую библиотеку UIPEthernet. Все работает, но…

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

Кто-нибудь сталкивался с этим вопросом?

Массивы char это байты, а если можно передавать байты - значит можно передавать что угодно. Любые другие типы данных могут быть представлены как массивы байт

Я тоже так подумал сначала.
Использую функции read() и write(), аргумент там - указатель на char. Так вот, когда я с компьютера посылаю данные типа float, read() прочитывает в буфер char пустую строку.
Такое ощущение, что функция видит, что получила не код символа и игнорирует данные.

Показывайте оба кода - как отправляете и как получаете.
Без кода разговор ни о чем

Отправляю - так:

float fbuf[1];
fbuf[0] = 789;
UDPServer->SendBuffer(“192.168.254.10”, 2000, fbuf, 4);

Получаю - так:

char receivingBuffer[250];
EthernetUDP udp;
int size = udp.parsePacket();
udp.read(receivingBuffer, size);

Потом содержимое receivingBuffer вывожу в COM-порт и смотрю в мониторе порта.

и какой размер вам показывает эта строка при приеме? Или вы ее не проверяете?

Минутку, сейчас все подсоединю и еще раз проверю.

size все время 0. А дальше у меня - if (size) udp.read(receivingBuffer, size);

ну вот и ответ. Вы реально ничего не шлете
Я не имею много опыта с этой библиотекой, но мне кажется если вы на приемнике принимаете пакет, то и на передатчике тоже надо отсылать пакет, а не просто бросать 4 байта в мировой эфир.
У библиотеки есть примеры, начните с них

Что означает 2000, 4?
Какого типа параметр ожидает SendBuffer в третьем аргументе?

Гриш, я вообще не нашел такого метода в библе

Точно, вижу в WireShark’е, что ничего не шлю. Это мне надо с Borland’овской библиотекой разбираться… С char почему-то работает…

2000 - порт, 4 - размер данных в байтах.

Вот:

void __fastcall SendBuffer(AnsiString AHost, const int APort, void *ABuffer, const int AByteCount);

Это IdUDPServer, использую под Borland’ом.

А что, символьные массивы отсылаются успешно? приходит именно то, что отсылаете или опять не проверяли?

С символьными все работает без сбоев, вчера полдня тестировал: получал и отправлял назад (и в компьютере так же, то есть делал бесконечный обмен).

Borland Delphi (или как там оно сейчас зовётся)? Там точно имя массива служит указателем, как того ожидает функция?

Если с char всё проходит, то должно и вот так пройти, если уж втупую проверять:
(char*) &fbuf[0]. Не знаю, как в дельфях с указателями работают, по сишному принципу наколхозил.

вот так попробуйте и расскажите, какого размера придет пакет и что внутри

char fbuf[] = "ABC";
UDPServer->SendBuffer(“192.168.254.10”, 2000, fbuf, 4);

да, Садман правильно спросил - Борланд Дельфи или Борланд С ?
Хотя на вид это Си

Это Си. Так пробовал - все работает, но я-то хочу флоты передавать…

Попробовал, не помогло :slight_smile:

Сейчас спрошу одного человека, доложу о результате.