From: Sergei R. <sro...@gm...> - 2006-10-27 09:54:33
|
Hi guys, Have the following PC config: NIC1: 192.168.81.15 / 255.255.255.0 NIC2: 10.0.0.1 / 255.255.255.0 Want to do: Want to send UDP broadcast packet to dest. addr. 255.255.255.255 from specified IP address on the PC (for example from 192.168.81.15 to 255.255.255.255) Problem: UDP broadcast packet doubles to: 1. source 192.168.81.15, dest. 255.255.255.255 sent via NIC1 2. source 192.168.81.15, dest. 255.255.255.255 sent via NIC2 So, recipients in 10.0.0.0 network receive broadcast packets with from FROM Ip address is 192.168.81.15 ! 10.0.0.0 network's machines get IP using: ip:= sock.GetRemoteSinIP; How I use sockets: TUDPClient = class(TThread) ....... CSock: TUDPBlockSocket; ................. constructor TUDPClient.Create; begin .................. CSock:= TUDPBlockSocket.Create; CSock.Bind(192.168.81.15,'0'); CSock.EnableBroadcast(true); ...... end; procedure TUDPClient.Execute; begin ................... CSock.Connect ('255.255.255.255', '11111'); CSock.SendBuffer(PChar(LocData),Length(LocData)); ...... //LocData is a string that I want to send. end; Why UDP packet been bound to specified IP, sends both to 192.168.81.0 and 10.0.0.0 networks with the SAME SOURCE IP address (192.168.81.15) ? I need to send the UDP broadcast packets bounded to each IP on the PC to 255.255.255.255 I imagine it should be like this: CSockBind: array of TUDPBlockSocket; constructor TUDPClient.Create; begin //getting all IPs of current PC to IPsToBind stringlist LocalIPsCount:= IPsToBind.Count; SetLength(CSockBind,LocalIPsCount); for i:= 0 to LocalIPsCount-1 do begin CSockBind[i]:= TUDPBlockSocket.Create; CSockBind[i].Bind(IPsToBind[i],'0'); CSockBind[i].EnableBroadcast(true); end; end; procedure TUDPClient.Execute; begin ............. //send packets for i:= 0 to LocalIPsCount-1 do begin if terminated then break; CSockBind[i].Connect('255.255.255.255', '11111'); CSockBind[i].SendBuffer(PChar(LocData),Length(LocData)); sleep(1); end; ............. end; I.e I thought that - CSockBind[1] sends packet to 255.255.255.255 from source 192.168.81.15 via NIC1 to 192.168.81.0 network - CSockBind[2] sends packet to 255.255.255.255 from source 10.0.0.1 via NIC2 to 10.0.0.0 network But I does not work....every packet doubles on each NIC and sent to bott (192... and 10...) networks with source IP 192.168.81.15 (!!!!) Where I'm wrong? Thanks alot. -- Sergei |