Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.06.2010, 15:09
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию сеть

есть клиент-серверное приложение...как в серверной части получить список клиентских машин(компов в сети) и отобразить их к примеру в ListBox. Как можно проще,плиз.
Ответить с цитированием
  #2  
Старый 30.06.2010, 15:40
Аватар для T-dayne
T-dayne T-dayne вне форума
Начинающий
 
Регистрация: 26.01.2010
Сообщения: 180
Репутация: 31
По умолчанию

Если на сокетах то
Код:
procedure addhoststolist();
  var   i: integer;
begin
for i:=0 to server.Socket.ActiveConnections-1 do
 begin
  setlength(ips, inc(p)-1);
  listbox1.items.add(server.Socket.Connections[i].RemoteAddress);
 end;
end;

Так у тебя будет листбокс со всеми клиентами.

Последний раз редактировалось T-dayne, 30.06.2010 в 15:44.
Ответить с цитированием
  #3  
Старый 30.06.2010, 15:40
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

Код:
function FillNetLevel(xxx: PNetResource; List: TListItems): Word;
type
  PNRArr = ^TNRArr;
  TNRArr = array[0..59] of TNetResource;
var
  x: PNRArr;
  tnr: TNetResource;
  I: integer;
  EntrReq, SizeReq, twx: THandle;
  WSName: string;
  LI: TListItem;
begin
  Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
    RESOURCEUSAGE_CONTAINER, xxx, twx);
  if Result = ERROR_NO_NETWORK then
    Exit;
  if Result = NO_ERROR then
  begin
    New(x);
    EntrReq := 1;
    SizeReq := SizeOf(TNetResource) * 59;
    while (twx <> 0) and
      (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
    begin
      for i:=0 to EntrReq - 1 do
      begin
        Move(x^[i], tnr, SizeOf(tnr));
        case tnr.dwDisplayType of
          RESOURCEDISPLAYTYPE_SERVER:
            begin
              if tnr.lpRemoteName <> '' then
                WSName := tnr.lpRemoteName
              else
                WSName := tnr.lpComment;
              LI := list.Add;
              Application.ProcessMessages;
              LI.Caption := UpperFirstChar(copy(WSName, 3, length(WSName) - 2));
if Length(tnr.lpComment) = 0 then LI.SubItems.Add('НЕТ ОПИСАНИЯ') else LI.SubItems.Add(tnr.lpComment);
            end;
        else
          FillNetLevel(@tnr, list);
        end;
      end;
    end;
    Dispose(x);
    WNetCloseEnum(twx);
  end;
end;
использовать так:
Код:
FillNetLevel(nil,ListView1.Items);
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel

Последний раз редактировалось Marvel, 30.06.2010 в 15:50.
Ответить с цитированием
  #4  
Старый 30.06.2010, 15:47
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

пробовал оба.че т не идет у мя(


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, DateUtils, StdCtrls;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1GetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TServerThread = class(TServerClientThread) // клас многопоточного сервера
    protected
      procedure ClientExecute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TServerThread.ClientExecute;
var
  bufIn: array [0..65535] of Char; // буфер для входящих данных
  fRSData: TWinSocketStream; // клиентский поток
  buf_size: integer; // размер входящего буфера
  bufOut: TMemoryStream; // приёмный буфер в памяти
begin
  bufOut := TMemoryStream.Create; // создаём приёмный буфер в памяти
  inherited // наследуем все свойства от родителя
  FreeOnTerminate := True; // освобождать память при завершении потока
  fRSData := TWinSocketStream.Create(ClientSocket, 100000); // создаём клиентский
  try
    while (not Terminated) And (ClientSocket.Connected) do // работаем пока есть коннект или пока не закрылись
    begin
      if fRSData.WaitForData(12000) = False then Break; // если за 2 минуты ничего не пришло, закрывает поток
      buf_size := ClientSocket.ReceiveLength; // размер входящего буфера

      if buf_size = 0 then Break; // если входящий буфер = 0, то закрываемся

      fRSData.ReadBuffer(bufIn,buf_size); // читаем буфер
      BufOut.Write(bufIn,buf_size); // пишем буфер в память, для последующего сохранения в файл
      bufOut.SaveToFile('LogForServer.txt'); // сохраняем лог
      bufOut.Free; // освобождаем память от данных
    end;

    except
    on e:exception do // если произошла ошибка
      begin
        ClientSocket.Close; // закрываем соединение с клиентом
        Terminate; // остановка
      end;
    end;
  fRSData.Free; // освобождаем память от клиентского потока
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ServerSocket1.Active := True; // активируем серверную часть
end;

procedure TForm1.ServerSocket1GetThread(Sender: TObject;
  ClientSocket: TServerClientWinSocket;
  var SocketThread: TServerClientThread);
begin
  SocketThread := TServerThread.Create(False, ClientSocket); // создаём отдельный поток
  SocketThread.Priority := tpLower; // ставим ему низкий приоритет, высокий не нужен
end;


end.
Ответить с цитированием
  #5  
Старый 30.06.2010, 15:50
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

твой код марвел)
Ответить с цитированием
  #6  
Старый 30.06.2010, 15:51
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

вижу, доделываю бред твоего профессора в данный момент ))
P.S.: если у тя в сети закрыт NETBIOS, то ты не узнаешь какие компы есть, тока сканировать диапазон IP. И не забывай ставить тэги, Admin не дремлет ))
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel
Ответить с цитированием
  #7  
Старый 30.06.2010, 15:54
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

я 2 пункта первых сделал..нада 3,4(
http://ifolder.ru/18365809
а 3 пункст методом T-Dayne мона?)простота привлекает)
Ответить с цитированием
  #8  
Старый 30.06.2010, 16:02
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

по методу T-Dayne ты получишь список клиентов подключенных к серверу, а т.к. клиент подключается раз в 10 минут, сбрасывает инфу и отключается, то постоянных подключенных клиентов не будет, список будет почти всегда пуст Тут надо в каждый клиент встраивать маленький сервер, чтобы при обращении к клиенту можно было получать данные о нём когда нужно, ИЛИ делать так, что бы клиент при подключении не отключался, а всегда висел, тогда с него можно будет получать инфу (типо как аська)
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel

Последний раз редактировалось Marvel, 30.06.2010 в 16:07.
Ответить с цитированием
  #9  
Старый 30.06.2010, 19:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А что, собирать информацию в момент подключения клиента очень тяжело? В момент подключения клиента просто заносишь его имя в список. Если у тебя один клиент подключается раз в 10 минут, то если он не подключался в течении 21 минуты, то удаляешь тиакого клиента из списка (типа больше не работает - пропустил 2 сеанса связи).
Ответить с цитированием
  #10  
Старый 01.07.2010, 13:32
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

решил переделать что бы клиент был всегда подключен, ибо одно из условий задачи - получение инфы с клиента по желанию
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel
Ответить с цитированием
  #11  
Старый 01.07.2010, 15:19
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

ну да,как вчера и думали.терь T-dayne код падайдет?)
Ответить с цитированием
  #12  
Старый 01.07.2010, 15:26
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

отчасти да
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel
Ответить с цитированием
  #13  
Старый 01.07.2010, 16:23
norfolk23 norfolk23 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

хелп плиз сроки горят..немного прогу доделать надо..
Надо сделать(в серверной части) так чтобы в серверный лог ДОПИСЫВАЛОСЬ,а не перезаписывался серв.лог + эти 2 пункта.
3. В серверной части на форме нужно отображать какую-нибудь информацию. Например, информацию о доступных клиентах, чтобы администратор мог при желании наблюдать текущее состояние.
4. Нужно продумать возможность просматривания лог файлов на сервере по выбранной машине.


прога здесь http://ifolder.ru/18416650

Последний раз редактировалось norfolk23, 04.07.2010 в 20:05.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter