![]() |
Socket-Text an mehrere Rechner nacheinander im Netzwerk send
Hallo,
Ich hab ein kleines Netzwerkverwaltungstool geschrieben, ist nichts grosses ohne grosse Spielerein. Ich wähle die IP's ganz einfach aus ner Listbox und wähle die Aktion. Nun will ich aber das alle Rechner nacheinander aus der ListBox Text gesendet bekommen. Eine Schleife durchläuft auch ganz gut die Listbox, aber irgendwie kommt nie was beim "Server" an.
Delphi-Quellcode:
procedure TForm1.MassSend(Command:String);
begin; ListIp.ItemIndex := 0; AllCommand := Command; AllCommandTimer.Enabled := true; end;
Delphi-Quellcode:
Ist kein guter Quelltext, ich weis aber wie gesagt, sollte nichts grosses sein daher bissel Spaghetti Code.
procedure TForm1.AllCommandTimerTimer(Sender: TObject);
var tempip:String; begin tempip := ListIp.Items[ListIp.Itemindex]; try Client.Close; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen'); //das gibt er immer aus Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden'); end; Client.Host := tempip; try Client.Open; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geöffnet'); //das gibt er immer aus Memo1.Lines.Add('Socket zu ' + tempip + ' nicht geöffnet'); end; try Client.Socket.SendText(AllCommand); Memo1.Lines.Add('IP ' + tempip + ' erfolgreich'); //das gibt er immer aus Memo1.Lines.Add('IP ' + tempip + ' nichterfolgreich'); end; ListIp.ItemIndex := ListIp.Itemindex + 1; if (ListIp.ItemIndex >= ListIp.Count) then AllCommandTimer.Enabled := False; end; gruss und schonmal DAnke Maik |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
du schreibst das die schleife die Listbox durchläuft. Aber im Quelltext ist nirgends eine Schleife zu sehen sondern nur das du den ItemIndex auf 0 setzt.
|
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
Naja, nicht wirklich ne Schleife :D
Das war mein erster Ansatz, den ich aber verworfen hatte weil ich dachte das das zwecks anti spam oder so net geht, was eigentlich auch blödsinn ist :-) Jetzt ist es folgendermassen: Beim Click auf den Button wird ein Timer aktiviert der jede Sekunde durchläuft. So, bei onTimer wird dann der ItemIndex jeweils 1 höher gemacht und die entsprechenden befehle werden gesendet. also praktisch ne TimerSchleife :D gruss Maik |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
was versuchst du eigentlich mit dem "try" zu erreichen? Was ist der Sinn davon?
wenn du
Delphi-Quellcode:
UND
Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen');
Delphi-Quellcode:
direkt hintereinander aufrufst wird logischer Weise auch beides hintereinander gemacht.
Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden');
Nur seh ich eben den Sinn nicht warum du 2 gegensetzliche Meldungen ausgibst. Das ist wie die Aussage: "Der Erde ist eine Scheibe und die Erde ist Rund und die Erde ist eine Elypse und die Erde existiert gar nicht" |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
rofl :D
OK, das war mein Fehler :D Hatte was falsch gepastet weil ich die kommentare noch fett machen wollte. So ist er eigentlich:
Delphi-Quellcode:
procedure TForm1.AllCommandTimerTimer(Sender: TObject); var tempip:String; begin tempip := ListIp.Items[ListIp.Itemindex]; try Client.Close; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen'); except Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden'); end; Client.Host := tempip; try Client.Open; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geöffnet'); except Memo1.Lines.Add('Socket zu ' + tempip + ' nicht geöffnet'); end; try Client.Socket.SendText(AllCommand); Memo1.Lines.Add('IP ' + tempip + ' erfolgreich'); except Memo1.Lines.Add('IP ' + tempip + ' nichterfolgreich'); end; ListIp.ItemIndex := ListIp.Itemindex + 1; if (ListIp.ItemIndex >= ListIp.Count) then AllCommandTimer.Enabled := False; end; |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
wenn schon dann so
Delphi-Quellcode:
procedure TForm1.AllCommandTimerTimer(Sender: TObject); var tempip:String; begin tempip := ListIp.Items[ListIp.Itemindex]; try Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen'); Client.Close; except Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden'); end; Client.Host := tempip; try Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geöffnet'); Client.Open; except Memo1.Lines.Add('Socket zu ' + tempip + ' nicht geöffnet'); end; try Memo1.Lines.Add('IP ' + tempip + ' erfolgreich'); Client.Socket.SendText(AllCommand); except Memo1.Lines.Add('IP ' + tempip + ' nichterfolgreich'); end; ListIp.ItemIndex := ListIp.Itemindex + 1; if (ListIp.ItemIndex >= ListIp.Count) then AllCommandTimer.Enabled := False; end; |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
Jop, so ist es auch bzw. so hab ichs eben geändert.
|
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
jetzt wäre es noch sinnvoll zu wissen von welchem Typ Client ist und mit welcher Meldung er abbricht.
@Gruber_Hans_12345: Beim besten willen, aber so ist es falsch. Denn so würde die Meldung das es erfolgreich war auch kommen wenn ein Fehler kam und anschließend kommt noch die Meldung das es nicht erfolgreich war. Also widersprüchlich! Und es macht ja nicht wirklich sinn generell erstmal eine Erfolgsmeldung auszugeben und erst danach den Befehl wirklich auszuführen der dann am Ende eventuell gar nicht erfolgreich ausgeführt wurde. |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
Client ist vom Typ TClientSocket
Nochma der aktuelle QCode:
Delphi-Quellcode:
procedure TForm1.AllCommandTimerTimer(Sender: TObject);
var tempip:String; begin tempip := ListIp.Items[ListIp.Itemindex]; try Client.Close; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen'); except Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden'); end; Client.Host := tempip; try Client.Open; Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geöffnet'); except Memo1.Lines.Add('Socket zu ' + tempip + ' nicht geöffnet'); end; try Client.Socket.SendText(AllCommand); Memo1.Lines.Add('IP ' + tempip + ' erfolgreich'); except Memo1.Lines.Add('IP ' + tempip + ' nichterfolgreich'); end; ListIp.ItemIndex := ListIp.Itemindex + 1; if (ListIp.ItemIndex >= ListIp.Count) then AllCommandTimer.Enabled := False; end; Zitat:
Abbrechen tut er mit nem asynchronen Socketfehler |
Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
Und auf der anderen Seite gibt es wirklich einen TServersocket, der auf dem selben Port lauscht?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz