![]() |
|
|
#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 мона?)простота привлекает) |