Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > необходимо опросить сеть broadckast


Автор: egorowp 24.7.2010, 21:19
Необходимо опросить сеть broadckast запросом. и получить IP адреса всех работающих в сети машин. может я что то ни те дклаю но у 
IdUdpSerever. FPeerIP  всегда 0.0.0.0

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp : hostPacket;
begin
  tmp.magic:= StrToInt('0XC0FE00FF');
    tmp.size := 256    ;
    tmp.reserved0 := 0;
    tmp.reserved := '0';
  SendPak(tmp)
end;

procedure SendPak(BData: hostPacket);
var
  Init: TWSAData;
  SockOpt: BOOL;
  Sock: TSocket;
  Target: TSockAddrIn;
begin
  WSAStartup($101,Init);
  Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
  SockOpt:=TRUE;
  SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST, PAnsiChar(@SockOpt),SizeOf(SockOpt)) ;
  Target.sin_port:=htons(5049); //номер порта
  Target.sin_addr.S_addr:=INADDR_BROADCAST;
  Target.sa_family:=AF_INET;
  SendTo(Sock,BData,SizeOf(BData),0,Target,SizeOf(Target));
  WSACleanup;
end;

procedure TForm1.IdUDPServer1UDPException(AThread: TIdUDPListenerThread;
  ABinding: TIdSocketHandle; const AMessage: string;
  const AExceptionClass: TClass);
begin
  ShowMessage(Amessage);
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  AData: TBytes; ABinding: TIdSocketHandle);
var
  strm : TStream;
  LMsg: PhostPacket;
  srtt : string;
begin
  if SizeOf(AData) = 0 then
    Exit
  else begin
    LMsg := PhostPacket(AData);
    if LMsg.magic = StrToInt('0XC0FE00FF') then begin
      Caption := AThread.Binding.PeerIP;
      srtt := Utf8ToAnsi(LMsg.name);
    end;
  end;
end;


 smile 

Автор: dvamaster 9.8.2010, 12:23
Цитата(egorowp @  25.7.2010,  00:19 Найти цитируемый пост)
AThread.Binding


замени на ABinding

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)