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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.07.2011, 14:48
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию Работа с сокетами

Сделал связь клиент сервер, добавил функции перезагрузки компа и т.п.
Так вот вопрос: Можно ли реализовать удаленное управление файловой системой... тоесть типа тотал командер только по чужому компу, ну и удаленное управление реестром. Такое возможно реализовать?
Посоветуйте исходники, статьи или литературу по этой теме.
Ответить с цитированием
  #2  
Старый 02.07.2011, 15:03
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

ФС (чтоб не изобретать велосипед) - FTP (по Indy).
Реестр можно и вручную написать, не так то сложно.

Радмин пишешь, или что?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 02.07.2011, 15:52
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Ну практически радмин, работаю системником, и одна из моих задач обновлять у каждого юзера на компе некоторое количество файлов, и бегать с флешкой по этажам, отвлекая их от своей работы - глупо, вот решил сделать так, + быстрое исправление последствий криворукости многих... ну и начальнику нужно чтобы был контроль за работой сотрудников, поэтому буду думать: или скриншотить рабочие столы время от времени, либо лог работы для каждого компа вести. Ну вообщем нужен почти максимальный контроль удаленного компьютера. Напишу - начальник обещал премию)) + мне практика delphi программирования, с сокетами раньше работал только поверхностно, поэтому прошу литературку по теме: насчет написание редактора реестра, да и ФС
Ответить с цитированием
  #4  
Старый 02.07.2011, 16:54
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А чем готовые программы не устроили?

По литературе - есть гугл.
Что используешь для сокетов? TServerSocket/TClientSocket, Indy, WinSock?
Для реестра - класс TRegistry, или WinAPI-функции - что тебе удобнее.
Для файловой системы - лучше, конечно, FTP, но если нет желания его использовать - есть тот же WinAPI.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 02.07.2011, 17:10
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Готовые не охото юзать.
Использую TServerSocket и TClientSocket
гугл помог, вроде разобрался. Если будут вопросы задам в этой теме


Вот появился вопрос: Передаю скриншот рабочего стола сервера, есть ли разница в скорости при использование TServerSocket и TClientSocket, Indy или WinSock?

Последний раз редактировалось Kingcss, 02.07.2011 в 17:21.
Ответить с цитированием
  #6  
Старый 02.07.2011, 17:40
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Скорости чего? Сети - нет, так как протокол единый (TCP). А вот задержка между выполнением отправки и попаданием в аппаратный буфер будет разной. Если критично - лучше использовать WinSock, но там будут разницы в десятки, если не единицы, миллисекунд - думаю, не столь важно.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 02.07.2011, 18:44
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

тогда уж все на сокетах будет, щас пытался сделать передачу файла и выдает ошибку((
Сервер(он отправляет):
PHP код:
procedure TForm1.GrabWindow;
var
DeskTCanvas;
GrabImage:TImage;
msTMemoryStream;
begin
Desk
:= TCanvas.Create;
Desk.Handle:=GetWindowDC(GetDesktopWindow);
GrabImage.Width:=Screen.Width;
GrabImage.Height:=Screen.Height;
GrabImage.Canvas.CopyRect(Rect(00Screen.WidthScreen.Height),Desk,Rect(00Screen.WidthScreen.Height));
Desk.Free;
ms:=TMemoryStream.Create;
  try
GrabImage.Picture.Bitmap.SaveToStream(ms);
ms.Position:=0;
ServerSocket1.Socket.SendText(IntToStr(ms.Size) + #0);
ServerSocket1.Socket.SendStream(ms);
except
ms
.Free;
end;
end
и код клиента(он получает):
PHP код:
procedure TForm1.csRead(SenderTObjectSocketTCustomWinSocket);
var
s,sl:string;
begin
i
:=cs.Socket.ReceiveText;
if 
i='sendscreenshot' then
begin
    s
:=cs.Socket.ReceiveText;
    
SetLength(slStrLen(PChar(s))+1); 
    
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
    
DataSize:= StrToInt(sl);
    
Data:= TMemoryStream.Create;
    
Delete(s1Length(sl));
  try
    
Data.write(s[1], length(s));
    if 
Data.Size DataSize then
    begin
      Data
.Position:= 0;
      
Image1.Picture.Bitmap.LoadFromStream(Data);
      
Data.Free;
    
end;
  
except
    Data
.Free;
  
end;
end;
end
выдает ошибку, + щас начал не с того не с сего выдавать ошибку на GrabImage.Width:=Screen.Width;
Ответить с цитированием
  #8  
Старый 02.07.2011, 19:54
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Во-первых, какую ошибку?
Во-вторых:
Код:
var
  dw: HWND;
  dc: HDC;
  bmp: TBitMap;
begin
  bmp := TBitmap.Create;
  bmp .Width := Screen.Width;
  bmp .Height := Screen.Height;
  dw := GetDesktopWindow;
  dc := GetDC(dw);
  BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dc, 0, 0, SRCCOPY);
  ReleaseDC(dw, dc);
  // ...
end;
В-третьих, глупо передавать размер в виде строки, когда Integer заведомо занимает 4 байта.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #9  
Старый 02.07.2011, 20:37
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

выдает ошибку на строке:
PHP код:
ServerSocket1.Socket.SendText(IntToStr(ms.Size) + #0); 
и так же на строке:
PHP код:
ms.Free
и подскажи как изменить этот код для отправки любого файла, не только картинки.
Ответить с цитированием
  #10  
Старый 02.07.2011, 20:56
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Так текст ошибки можно?
И, да, отправка с сервера выглядит несколько иначе. Тебе всем клиентам надо разослать, или конкретному?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #11  
Старый 02.07.2011, 21:05
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

project server.exe raised exception class ESocketError with Message 'Windows socket error:Запрос на отправку и получение данных (when sending on a datagram socket using a sendto call) no address was supplied(10057), on API 'send". Process stoped
Мне надо чтобы данный сервер, подключенный данный момент прислал мне клиенту (тоесть мне) вот этот файл
Ответить с цитированием
  #12  
Старый 02.07.2011, 21:49
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Я, наверное, буду К.О., но к серверу могут подключиться НЕСКОЛЬКО клиентов. Обычно клиент отправляет запрос, а сервер "не отходя от кассы" на него отвечает. В событие OnClientRead у сервера (вроде как) передаётся параметр Socket, вот в него и надо отправлять.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #13  
Старый 02.07.2011, 21:56
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

клиент отправляет серверу команду "GrabWindow" и сервер выпоняет процедуру grabwindow описаную выше
Ответить с цитированием
  #14  
Старый 02.07.2011, 23:47
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Ну так. В эту процедуру параметром передавай сокет, который будет передан в событие сервера.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #15  
Старый 03.07.2011, 12:36
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Попробовал другой вариант:
PHP код:
MS := TMemoryStream.Create;
 
MS.LoadFromFile(Edit1.Text); 
 
//Image1.Picture.Bitmap.SaveToStream(ms); 
а потом пытаюсь определить размер файла: ms.Size
Если использую вторую строку: MS.LoadFromFile(Edit1.Text); то все нормально, а если Image1.Picture.Bitmap.SaveToStream(ms); то пишет размер 0 почему так?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter