Форум по 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 мона?)простота привлекает)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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