Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Socket-Text an mehrere Rechner nacheinander im Netzwerk send (https://www.delphipraxis.net/90877-socket-text-mehrere-rechner-nacheinander-im-netzwerk-send.html)

Maikiboy 25. Apr 2007 11:07


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:
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;
Ist kein guter Quelltext, ich weis aber wie gesagt, sollte nichts grosses sein daher bissel Spaghetti Code.


gruss und schonmal DAnke

Maik

SirThornberry 25. Apr 2007 11:11

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.

Maikiboy 25. Apr 2007 11:20

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

SirThornberry 25. Apr 2007 11:26

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:
Memo1.Lines.Add('Socket zu ' + tempip + ' erfolgreich geschlossen');
UND
Delphi-Quellcode:
Memo1.Lines.Add('Socket zu ' + tempip + ' konnte nicht geschlossen werden');
direkt hintereinander aufrufst wird logischer Weise auch beides hintereinander gemacht.
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"

Maikiboy 25. Apr 2007 11:29

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;

Gruber_Hans_12345 25. Apr 2007 11:31

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;

Maikiboy 25. Apr 2007 11:31

Re: Socket-Text an mehrere Rechner nacheinander im Netzwerk
 
Jop, so ist es auch bzw. so hab ichs eben geändert.

SirThornberry 25. Apr 2007 11:33

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.

Maikiboy 25. Apr 2007 11:37

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:

Es sind zwischenzeitlich neue Beiträge zu diesem Thread hinzugekommen oder es wurden welche editiert.
Vielleicht magst Du einen Blick auf die Themen-Vorschau (unten auf dieser Seite) werfen und die neuen Beiträge ggf. berücksichtigen. Neue bzw. editierte Beiträge sind farblich hervorgehoben.
An die Macher: Das ist doch mal eine geile Funktion! :-)

Abbrechen tut er mit nem asynchronen Socketfehler

Apollonius 25. Apr 2007 12:53

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.
Seite 1 von 3  1 23      

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