Каждый раз, как берусь писать прикладное сетевое приложение на Delphi (да, да, я им не брезгую, т.к. это отличная среда для прикладных задач и быстрой разработки), то приходится открывать книжку, на одной и той же замызганной странице, и набираю текст вручную, поэтому добавлю его сюда, и опишу как работать с UDP потоком, как со строкой.
Для начала ставим на форму компонент из вкладки Indy Servers называемый IdUDPServer, и по событию OnUDPRead в создавшейся процедуре делаем таким образом:
procedure TMainForm.srvUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
StringFormatedStream: TStringStream; //объявляем поток строкового типа
begin
StringFormatedStream := TstringStream.Create(''); //инициируем его
StringFormatedStream.CopyFrom(AData, AData.Size); //берём данные, поступившие нам на сервер, который слушает сеть
Memo1.Lines.Add(ABinding.PeerIP+':'+inttostr(ABinding.PeerPort)+'
'+StringFormatedStream.DataString); //полученные данные можно вывести,
например в Memo
//srv.Send(ABinding.PeerIP,ABinding.PeerPort,StringFormatedStream.DataString);
//посылаем поток дальше (это вовсе не обязательно делать, если у нас
сервер один)
StringFormatedStream.Free; //освобождаем поток
end;
И да, конечно же предварительно нужно настроить сам компонент, такие значения как DefaultPort по крайней мере, на который и будут приходить данные.
В свою очередь из другого приложения можно отправить поток простым способом через IdUDPServer или IdUDPClient — только второй не умеет принимать данные (или я об этом не знаю), таким способом
IdUDPServer.Send(IP:String, Port:Integer, 'Строка');
Протокол UDP, в отличие от его доделанного брата TCP, не поддерживает сессию, он только лишь отправляет поток данных в сеть по назначенном адресу (или широковещательному, например для сети с параметрами 192.168.1.1 максой 255.255.255.0 широковещательная отправка будет выглядеть как на адрес 192.168.1.255), и не заботится об их доставке (это можно реализовать самому, если нужно).
Теперь можно писать чат или всё, что угодно.
Это всё, такое простое, и всё равно забывается.