Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2013, 04:30   #1
SkiHunter
Новичок
Джуниор
 
Регистрация: 25.07.2013
Сообщений: 2
По умолчанию Программа управления. Клиент сервер

Здравствуйте, Я новичок в Delphi 7 поэтому прошу помощи. Написал программу для компьютерного клуба, цель: клиент " отдаёт команды " и сервер "исполняет", итак у меня есть файл из него считываются имена компов и их ip в StringGrid далее выделяя какой либо IP от сразу заносится в переменную можно отправить команду на сервер, у меня проблема не могу сделать цикл что бы из файла считались только IP и занеслись в переменную (по очереди пока идёт цикл) и выполнилась команда. Вот исходник:
Код:
unit CliUnit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ComCtrls, ExtCtrls, Grids, Menus, XPMan;
type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    StringGrid1: TStringGrid;
    PopupMenu1: TPopupMenu;
    Explorer1: TMenuItem;
    XPManifest1: TXPManifest;
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure Add1Click(Sender: TObject);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Explorer1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  constat:boolean = false;
  t1:string; /// ip адрес
  t2:string; /// команда на сервер 
implementation
{$R *.dfm}
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(t2);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
List:TStringList;
s,pole:string;
i:integer;
k:integer;
j:integer;

begin
StringGrid1.Visible:=true;
stringgrid1.Cells[0,0]:='Terminal';
stringgrid1.Cells[1,0]:='IP';
stringgrid1.Cells[2,0]:='Status';
/////Загружаем в лист содержимое БД
List:=TStringList.Create;
List.LoadFromFile('ff.txt');
StringGrid1.RowCount:=List.Count+1;
/////Загружаем в лист содержимое БД
for i:=1 to List.Count do begin
  k:=0;
  s:=List[i-1];
    for j:=1 to length(s) do begin
    if s[j]<>' ' then pole:=pole+s[j]
                 else begin stringGrid1.Cells[k,i]:=pole; pole:='';inc(k)   end;
    end;
end;
end;
///////////  занести значение выделенной ячейки t1////////
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
 t1:=StringGrid1.Cells[ACol, ARow]
 end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Active:=false;
end;
procedure TForm1.Dell1Click(Sender: TObject);
begin
     t2:='start del.cmd';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true;
end;
procedure TForm1.Explorer1Click(Sender: TObject);
begin
     t2:='start iexplore.exe';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
ShowMessage('Ошибка');
end;
end.
Нужна кнопка по нажатию вводится команда ну тот же запуск explorer только надо что бы команда была отправлена сразу на все сервера которые есть в ff.txt вот пример этого файла
Код:
Terminal1 169.254.3.20 
Terminal2 169.254.3.29 
Terminal3 192.168.0.3 
Terminal4 192.168.0.4 
Terminal5 192.168.0.5 
Terminal6 127.0.0.1 
Terminal7 10.10.10.244 
Terminal8 192.168.0.8
Это пример...
Помогите создать цикл с чтением из файла ip (разделитель пробелы) и в цикле подставлять их.

Последний раз редактировалось Stilet; 26.07.2013 в 09:37.
SkiHunter вне форума Ответить с цитированием
Старый 26.07.2013, 09:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-т я не понял вопроса...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2013, 12:00   #3
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Я так понял, что нужна кнопка, которая разом отправит одинаковую команду на все имеющиеся сервера.

Дак в чем проблема то? Перебор всех строк с IP и для каждой отправка команды.
В псевдокоде:
Код:
пока не достигнут *максимальный индекс*
begin
t1 = *ip с текущим индексом*
t2 = команда
*отправить команду*
*увеличить индекс на 1*
end
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 26.07.2013, 13:26   #4
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

SkiHunter, по сути у Вас данные в текстовом файле хранятся в формате ключ=значение, только вместо разделителя "=" (знака равно), у вас пробел. Так что можете просто загрузить файл в объект типа TStringList (что Вы собственно и делаете в приведенном коде, для объекта List), далее задаете пробел разделителем :
Код:
List.Delimiter:=' ';
И работаете с данным как с набором "ключ=значение" с использованием соответствующих методов и свойств (их куча, как правило в наименованиях есть слова Name, Value). Саму отправку команды реализуйте в виде подпрограммы(функции, процедуры) в которую передается в качестве параметра IP адрес клиента.
Например отправка команд по всем IP с помощью некой функции OtpravkaKomandi тогда может выглядеть так:
Код:
n:=pred(List.Count);
for i:=0 to n do
  OtpravkaKomandi(Trim(List.ValueFromIndex[i]));
Еще рекомендую рассмотреть работу с ini файлами, если Вам вдруг понадобится хранить больше информации о клиентах (а там глядишь и СУБД не за горами) ;-)
astecenko вне форума Ответить с цитированием
Старый 26.07.2013, 13:30   #5
SkiHunter
Новичок
Джуниор
 
Регистрация: 25.07.2013
Сообщений: 2
По умолчанию

Vanta11a проблема именно с перебором всех серверов, а точнее нужно открыть файл пропустить имя компа и взять только IP занести его в переменную потом взять второй адрес и занести в туже переменную...
SkiHunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа клиент-сервер (С++\С#) (oracle) utilizator13 Фриланс 2 14.09.2012 22:51
Программа клиент-сервер mraskc C++ Builder 0 14.02.2012 19:37
Программа клиент сервер Elephent Работа с сетью в Delphi 3 07.02.2011 18:08
Нужна программа клиент->Сервер->Интернет Globe_2007 Фриланс 3 10.01.2009 02:52
Помогите.Программа клиент-сервер vyt Работа с сетью в Delphi 3 14.03.2007 16:01