Тема: UdpSocket
Показать сообщение отдельно
  #2  
Старый 24.09.2010, 21:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Обычно я использую поиск. Вот нашел такой ответик:
Цитата:
В папке \delphi\demos\indy лежат примеры по применению данной библиотеки
Проверьте, может это правда.
А вот оттуда-же пример:
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Winsock, StdCtrls;
 
const
  HST_BROADCAST: String = '255.255.255.255';
  MAX_UDP_SIZE: Integer = 8192;
  WM_ASYNC = WM_USER + 1;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  public
    FHandle: HWND;
    procedure SockWND(var AMsg: TMessage); message WM_ASYNC;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FWSAData: TWSAData;
  FSockAddr: TSockAddrIn;
  FSocket: HWND;
  Option: Boolean;
  Data: String;
begin
  WSAStartup($0101, FWSAData);
  FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  with FSockAddr do
  begin
    sin_addr.S_addr := INADDR_BROADCAST;
    Option := True;
    SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));
    sin_port := htons(6767);
    sin_family := AF_INET;
  end;
  Data := 'My first broadcast message!!!';
  SendTo(FSocket, Data[1], Length(Data), 0, FSockAddr, SizeOf(FSockAddr));
  closesocket(FSocket);
  WSACleanup;
end;
 
procedure TForm1.SockWND(var AMsg: TMessage);
var
  Buffer: array [0..8191] of Char;
  Size: Integer;
  SockAddr: TSockAddrIn;
begin
  with AMsg do
    case Msg of
    WM_ASYNC:
    begin
      case WSAGetSelectEvent(LParam) of
        FD_READ:
        begin
          FillChar(Buffer, 8192, #0);
          Size := SizeOf(SockAddr);
          recvfrom(WParam, Buffer[0], MAX_UDP_SIZE, 0, SockAddr, Size);
          ShowMessage(StrPas(@Buffer));
          DeallocateHWnd(FHandle);
          closesocket(WParam);
          WSACleanup;
        end;
      end;
    end
    else
      DefWindowProc(FHandle, Msg, WParam, LParam);
    end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  FWSAData: TWSAData;
  FSockAddr: TSockAddrIn;
  FSocket: HWND;
  Option: Boolean;
  Data, SrvHost: String;
begin
  WSAStartup($0101, FWSAData);
  FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  with FSockAddr do
  begin
    SrvHost := '192.168.2.108'; // Это IP сервака (т.е. нашей машины)
    sin_addr.S_addr := inet_addr(PChar(SrvHost));;
    Option := True;
    SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));
    sin_port := htons(6767);
    sin_family := AF_INET;
  end;
  bind(FSocket, FSockAddr, SizeOf(FSockAddr));
  FHandle := AllocateHWnd(SockWND);
  WSAAsyncSelect(FSocket, FHandle, WM_ASYNC, FD_READ);
end;
 
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием