Не можу передати дані за допомогою idudpclient

Не можу передати дані за допомогою idUDPClient / idUDPServer

Вітаю! Пишу чат для локальної мережі. Використовую Indy-йскіе UDP-клієнт і Udp-сервер. При відправці широкомовного повідомлення виникає наступна проблема: якщо я відправляю дані методом idUdpClient.Send (Adata: string), то мені вдається отримати цей рядок сервером в подію idUDPServer.onUDPRead, тобто з доставкою рядків проблем не виникає.
Але якщо я відправляю дані (наприклад, типу byte) методом idUdpClient.SendBuffer (var ABuffer, const ABytesCount: integer), то при отриманні сервером даних (подія onUDPRead) я отримую "невірні" дані в потоці AData: Stream.
Наводжу код для "невірного" випадки:

// Відправка даних
procedure TMainFrm.Button1Click (Sender: TObject);
var buf: TMemoryStream;
# XA0; # XA0; s: string;
begin
buf: = Tmemorystream.Create;
F: = 6;
Buf.WriteBuffer (F, 1);
Buf.Position: = 0;
IdUdpClient1.SendBuffer (Buf, Buf.size);
s: = IdUdpClient1.ReceiveString;
If s = "" then ShowMessage ( "No answer")
else ShowMessage (s);

# XA0; If z = 6 then ShowMessage ( "Ok12");
# XA0; s: = "I got";
# XA0; With Abinding do
# XA0; SendTo (PeerIP, PeerPort, s [1], Length (s));
# XA0; Buf.Free;

Може хто-небудь мені пояснить в чому проблема?

Звичайно, можна і в рядок записати дані будь-якого типу, але тоді доведеться спочатку конвертувати дані в рядок при відправці, відправляти методом Send (отримана рядок), і робити зворотну конвертацію (з рядка в свій тип даних) при прийомі. Мені такий підхід якось не до душі :).
Все ж чому не працює метод SendBuffer? У мене руки криві або це глюк INDY?

Зараз не варто Indy, але спробую. Якщо в Індях в SendBuffer використовується теж нетипізований буфер, то потрібно:
IdUdpClient1.SendBuffer (Buf.Memory, Buf.size);
І необов'язково тоді встановлювати Position в 0


> IdUdpClient1.SendBuffer (Buf, Buf.size);

Ехехе. А ти подумав, ЩО ти таким чином відправляєш?


> У мене руки криві або це глюк INDY?

Це не глюк Indy, а ось руки. Скоріше не криві, а недосвідчені. ;-)

Так що ж Nike таким чином відправляє?


> Що ж Nike таким чином відправляє?


> PChar (@F) ^

Навіщо. Можна і просто числа, і стуктуру, і статичний масив передавати як Нетипізовані змінну. З динамічними масивами складніше.


> Nike # XA0; (16.10.05 09:03)

При всьому тому, що тут вже сказали врахуй, що розмір переданих даних не повинен перевищувати максимального розміру дейтаграм, інакше не бачити тобі удачі.

Сорькі за помилки, на швидку руку накатав (=

Пам'ять: 0.75 MB
Час: 0.046 c