also, port 999 werde ich dann mal ändern. Aber ich kann nciht einfach kucken, ober connecten kann, da ich eine Zählschleife als IP prüfer verwende. WEnn er nicht verbinden kann, fliegt er aus der Zählschleife raus. Und dann kann ich keine komplette liste, von allen Netzwerkclients machen, an die ich Daten schicken möchte. Mein Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm9.datensenden; Var i,j:integer; host:String; Begin j:=1; host:=form7.getsubnet('192.168.0.1'); form1.IdTCPClient1.Port:=999; for i := 1 to 254 DO Begin If form7.istda(host + inttoStr(i)) THEN Begin form9.StringGrid1.Cells[0,j] :=host + inttoStr(i); form1.IdTCPClient1.Host:=host + InttoStr(i); form1.IdTCPClient1.Connect; If form1.IdTCPClient1.Connected THEN form1.IdTCPClient1.WriteLn(form2.Edit1.Text + '|' + form7.Memo1.Lines.Strings[0]); form1.IdTCPClient1.Disconnect; form1.IdTCPClient1.Free; sleep(10); j:=j + 1; end; end; end; |
das ist die procedure, umalle Rechner im Netz zu finden^^
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68:
| function TForm7.istda(Host:String):boolean; var ICMP: TidIcmpClient; begin ICMP:= TidICMPClient.Create(nil); ICMP.ReceiveTimeout:=300; result:= False; ICMP.Host:= host; ICMP.Ping; result:= ICMP.ReplyStatus.ReplyStatusType <> rsTimeOut; ICMP.Free; end;
function TForm7.getIPs: Tstrings; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: array[0..63] of Char; I: Integer; GInitData: TWSAData; begin WSAStartup($101, GInitData); Result := TstringList.Create; Result.Clear; GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin Result.Add(inet_ntoa(pptr^[I]^)); Inc(I); end; WSACleanup; end;
function TForm7.getsubnet(IP :string):string; var i,j:integer; text1 :string; begin text1:=''; for i := 1 to Length(IP) Do text1:=IP[i] + text1; j:=1; For j := 1 to 3 DO Begin If (text1[1] <> '.') THEN delete(text1,1,1); end; for i := 1 to Length(text1) Do result:=text1[i] + result;
end;
procedure TForm7.BitBtn3Click(Sender: TObject); begin form9.Show;
form9.datensenden; end;
end. |
das ist ein ausschnitt ausder anderen unit, hier wird zum einen das Subnet festgestellt, zum anderen die Ip und außerdem die Procedure datensenden aufgerufen