Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

Помогите информацией об использовании UDP   Найти похожие ветки 

 
@!!ex ©   (2008-02-20 17:14) [0]

сабж


 
Игорь Шевченко ©   (2008-02-20 17:15) [1]

Сколько угодно:

http://www.google.ru/search?source=ig&hl=ru&rlz=&q=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+UDP&meta=


 
@!!ex ©   (2008-02-20 17:16) [2]

блин... я уже минут 40 ничего откопать не могу.. а тут - первая же ссылка. :\


 
@!!ex ©   (2008-02-20 17:18) [3]

Только там компонент, :(


 
@!!ex ©   (2008-02-20 17:26) [4]

Может у кого пример использования UDP Для рассылки сообщений на все компы в локалке есть?


 
tesseract ©   (2008-02-20 17:30) [5]


> Может у кого пример использования UDP Для рассылки сообщений
> на все компы в локалке есть?


TUdpBase.Brodacast("прива всем",65535);


 
@!!ex ©   (2008-02-20 17:31) [6]

> [5] tesseract ©   (20.02.08 17:30)
> TUdpBase

Что такое TUDPBase?


 
VirEx ©   (2008-02-20 17:31) [7]

это вроде широковещательного адреса?


 
tesseract ©   (2008-02-20 17:32) [8]


> Что такое TUDPBase?


точнее tIdUDPBase из INDY.


> это вроде широковещательного адреса?


UDP как правило для широковещательных запросов и используеться.


 
@!!ex ©   (2008-02-20 17:34) [9]

> [8] tesseract ©   (20.02.08 17:32)

формы нет... да к тому же TDE без indy. :(


 
VirEx ©   (2008-02-20 17:43) [10]

C:\Program Files\Borland\Delphi7\Demos\Internet\NetChat


 
@!!ex ©   (2008-02-20 18:23) [11]

Мда... самое смешное, что единственный, относительно нормальный, пример по работе с UDP содержится в книге Флёнова... :((


 
easy ©   (2008-02-20 18:41) [12]

http://delphiworld.narod.ru/base/send_broadcast_udp_package.html


 
@!!ex ©   (2008-02-20 18:46) [13]

> [12] easy ©   (20.02.08 18:41)

Отослать как понятно... А получить? :))


 
Zeqfreed ©   (2008-02-20 19:15) [14]

http://gnosis.cx/publish/programming/sockets2.html

См. разделы A UDP echo client in C и A UDP echo server in C. Найти было сложно до невозможности ;)


 
easy ©   (2008-02-20 22:53) [15]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Winsock, StdCtrls;

const
 WM_DATAREADY = WM_USER + 101;
 
type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   FSocket:TSocket;
   procedure WMDATAREADY(var AMsg: TMessage); message WM_DATAREADY;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 FWSAData: TWSAData;
 SockAddr: TSockAddr;
 SockOpt: Boolean;
begin
 WSAStartup($101, FWSAData);
 FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 with SockAddr do
 begin
   sin_addr.S_addr := INADDR_ANY;
   SockOpt := True;
   SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@SockOpt), SizeOf(SockOpt));
   sin_port := htons(8167);
   sin_family := AF_INET;
 end;
 Bind(FSocket, SockAddr, SizeOf(SockAddr));
 WSAAsyncSelect(FSocket, Handle, WM_DATAREADY, FD_READ);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if FSocket <> INVALID_SOCKET then
   CloseSocket(FSocket);
 WSACleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SockOpt: Boolean;
 Sock: TSocket;
 SockAddr: TSockAddr;
 SendStr: string;
begin
 Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
 with SockAddr do
 begin
   sin_addr.S_addr:=INADDR_BROADCAST;
   SockOpt:=True;
   SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST, PChar(@SockOpt),SizeOf(SockOpt)) ;
   sin_port:=htons(8167);
   sin_family:=AF_INET;
 end;
 SendStr:="UDP сообщение";
 SendTo(Sock,SendStr[1],Length(SendStr),0,SockAddr,SizeOf(SockAddr));
 CloseSocket(Sock);
end;

procedure TForm1.WMDATAREADY(var AMsg: TMessage);
var
 Buffer: array [0..100] of Char;
 Size: Integer;
 SockAddr: TSockAddr;
begin
 case WSAGetSelectEvent(AMsg.LParam) of
   FD_READ:
     begin
       FillChar(Buffer, SizeOf(Buffer), 0);
       Size := SizeOf(SockAddr);
       RecvFrom(AMsg.WParam, Buffer, SizeOf(Buffer), 0, SockAddr, Size);
       ShowMessage(StrPas(@Buffer));
     end;
 end;
end;

end.


 
Сергей М. ©   (2008-02-20 23:00) [16]


> @!!ex ©   (20.02.08 17:34) [9]
> формы нет


Ты вроде бы, судя по прочим твоим постам, не формошлеп)..
Что, без форм уже никак ? Совсем заплохело что ли ?)

Какая нафих разница, есть Инди или нет Инди, есть форма или нет ее ?)

Делфи-объект - он и в Африке Делфи-объект. Форма ему нужна как формошлепу батон).. Или батоношлепу форма)


 
@!!ex ©   (2008-02-21 07:38) [17]

> [16] Сергей М. ©   (20.02.08 23:00)

Про то, что компоненты можно использовать без формы - я в курсе, вопрос как Indy поставить...


 
@!!ex ©   (2008-02-21 07:39) [18]

> [15] easy ©   (20.02.08 22:53)

Спасибо!


 
tesseract ©   (2008-02-21 10:02) [19]


> Про то, что компоненты можно использовать без формы - я
> в курсе, вопрос как Indy поставить...


В TDE они есть. Просто невизуальные.


 
Григорьев Антон ©   (2008-02-21 11:54) [20]


> @!!ex ©   (20.02.08 18:23) [11]
> Мда... самое смешное, что единственный, относительно нормальный,
>  пример по работе с UDP содержится в книге Флёнова... :((

Ээээээ.... http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021#10 - про UDP вообще
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021#12 - про параметры сокета, в т.ч. про те, которые разрешают широковещательную рассылку

В книге ещё и готовые примеры есть. Правда, широковещательной рассылки там нет, но в UDP широковещательная рассылка от обычной отправки отличается только тем, что вместо IP-адреса компьютера ставится широковещательный адрес подсети. Скажем, если поставить адрес 192.168.35.255, то сообщение получат все компьютеры с адресами 192.168.35.X. Надо только помнить про TTL (Time To Live) - у широковещательных сообщений он по умолчанию 1, т.е. через маршрутизатор такие пакеты не пройдут. Надо узнать у админа, какой TTL для таких пакетов нужен, и установить его с помощью опции сокета IP_MULTICAST_TTL.


 
Черный Шаман   (2008-02-21 16:37) [21]

Если через 10-тку Indy, то
отправить UDP пакет:
TIdUDPServer
1.   IdUDPServer.BroadcastEnabled := True; послать всем в бродкастовом сегменте(где нет маршрутизаторов).
2. Отсылка сообщения через методы
- IdUDPServer1.Send(...)
- IdUDPServer1.SendBuffer(...);
Если IdUDPServer.BroadcastEnabled то пошлет всем в бродкастовой сети. Как делать multicast я не знаю.

Получить UDP пакет:
TIdUDPServer
1.   IdUDPServer.ThreadedEvent := True; но в данном случае обработка пакета идет из нового потока, если взаимодействовать с VCL нужно обдумать синхронизацию с основным потоком VCL.
2.   IdUDPServer.BroadcastEnabled := True; послать всем в бродкастовом сегменте(где нет маршрутизаторов).
3. Обработка пакета происходит в делегате события OnUDPRead

Компоненты Indy можно создавать в рантайме, формы они не требуют. Единственный недостаток - размер udp пакета не может превышать (512-40) - ~1500 байт в зависимости от размера MTU.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.006 c
3-1194865899
Den
2007-11-12 14:11
2008.04.06
управление БД из dll


2-1205330172
nub
2008-03-12 16:56
2008.04.06
Ошибка с ValueListEditor


15-1203497699
md10
2008-02-20 11:54
2008.04.06
SQL and C Sharp


4-1186043421
Dot
2007-08-02 12:30
2008.04.06
управление потоками


15-1203573447
Alex8
2008-02-21 08:57
2008.04.06
QuickReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский