|
#1
|
|||
|
|||
сеть
есть клиент-серверное приложение...как в серверной части получить список клиентских машин(компов в сети) и отобразить их к примеру в ListBox. Как можно проще,плиз.
|
#2
|
||||
|
||||
Если на сокетах то
Код:
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
|
||||
|
||||
Код:
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
|
|||
|
|||
пробовал оба.че т не идет у мя(
Код:
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
|
|||
|
|||
твой код марвел)
|
#6
|
||||
|
||||
вижу, доделываю бред твоего профессора в данный момент ))
P.S.: если у тя в сети закрыт NETBIOS, то ты не узнаешь какие компы есть, тока сканировать диапазон IP. И не забывай ставить тэги, Admin не дремлет )) Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel |
#7
|
|||
|
|||
я 2 пункта первых сделал..нада 3,4(
http://ifolder.ru/18365809 а 3 пункст методом T-Dayne мона?)простота привлекает) |
#8
|
||||
|
||||
по методу T-Dayne ты получишь список клиентов подключенных к серверу, а т.к. клиент подключается раз в 10 минут, сбрасывает инфу и отключается, то постоянных подключенных клиентов не будет, список будет почти всегда пуст Тут надо в каждый клиент встраивать маленький сервер, чтобы при обращении к клиенту можно было получать данные о нём когда нужно, ИЛИ делать так, что бы клиент при подключении не отключался, а всегда висел, тогда с него можно будет получать инфу (типо как аська)
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel Последний раз редактировалось Marvel, 30.06.2010 в 16:07. |
#9
|
|||
|
|||
А что, собирать информацию в момент подключения клиента очень тяжело? В момент подключения клиента просто заносишь его имя в список. Если у тебя один клиент подключается раз в 10 минут, то если он не подключался в течении 21 минуты, то удаляешь тиакого клиента из списка (типа больше не работает - пропустил 2 сеанса связи).
|
#10
|
||||
|
||||
решил переделать что бы клиент был всегда подключен, ибо одно из условий задачи - получение инфы с клиента по желанию
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel |
#11
|
|||
|
|||
ну да,как вчера и думали.терь T-dayne код падайдет?)
|
#12
|
||||
|
||||
отчасти да
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel |
#13
|
|||
|
|||
хелп плиз сроки горят..немного прогу доделать надо..
Надо сделать(в серверной части) так чтобы в серверный лог ДОПИСЫВАЛОСЬ,а не перезаписывался серв.лог + эти 2 пункта. 3. В серверной части на форме нужно отображать какую-нибудь информацию. Например, информацию о доступных клиентах, чтобы администратор мог при желании наблюдать текущее состояние. 4. Нужно продумать возможность просматривания лог файлов на сервере по выбранной машине. прога здесь http://ifolder.ru/18416650 Последний раз редактировалось norfolk23, 04.07.2010 в 20:05. |