Необходимо опросить сеть 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;
|
|