![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть программа, состаящая из клиента и сервера. Клиент отправляет сообщение через ServerSocket, сервер анализирует и в зависимости от полученного сообщения выполняет действия(или ничего не делает)
В чем именно проблема я не знаю, но сервер не присылает список программ... Программу списываю с http://www.xakep.ru/post/12475/ Процедуру сбора сведений о полученных процессах взял тут: http://zetblog.ru/programming/200812/winapi-получить список-запущенных-процесс/ Поковырял немного и получилось вот так: Код:
function GetProcessList(ServerSocket1: TServerSocket): TStrings;
var
eP: TProcessEntry32;
hP, snap: THandle;
hM: hmodule;
prcs: array[0..$FFF] of dword;
cP, cM: cardinal;
i: integer;
NameProc: array[0..max_path] of char;
begin
lP:=TStringList.Create;
lP.Clear;
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
begin //если это Win9x
snap := CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
if integer(snap) = -1 then
begin
exit;
end
else
begin
eP.dwSize := sizeof(eP);
if Process32First(snap, eP) then
repeat
lP.Add(string(eP.szExeFile));
until not Process32Next(snap, eP);
end;
end
else
begin
if not EnumProcesses(@prcs, sizeof(prcs), cP) then
begin
exit;
end;
for i := 0 to cP div 4 - 1 do
begin
hP := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
false, prcs[i]);
if hP > 0 then
begin
EnumProcessModules(hP, @hM, 4, cM);
GetModuleFileNameEx(hP, hM, NameProc, sizeof(NameProc));
ServerSocket1.Socket.Connections[0].SendText(ExtractFileName(string(NameProc)));
lP.Add(string(NameProc));
CloseHandle(hP);
end;
end;
end;
end;при этом вызов функции идет из: Код:
begin
a:=Socket.ReceiveText;
if a ='hello' then Socket.SendText('Hello, i`m you server');
RichEdit1.Lines.Add(a);
if a= 'StartFTP' then
begin
FTPServer1.Start;
Socket.SendText('FTP Server started');
end;
if a= 'StopFTP' then
begin
FTPServer1.DisconnectAll;
FTPServer1.Stop;
Socket.SendText('FTP Server stoped');
if a='lp' then GetProcessList(ServerSocket1); //этой строки
if copy(a,1,2) = 'dp' then
delproc(copy(a,4,Length(a)-3));
end;
end;Возвращает ничего. Пожалуйста, помогите разобраться... я в делфи новичек и, возможно, допускаю какую-нибудь глупую ошибку в коде... Но спросить не у кого... Последний раз редактировалось homeknight, 04.04.2012 в 00:43. |
|
#2
|
||||
|
||||
|
Уверен, что
Код:
a := Socket.ReceiveText; Код:
lP:=TStringList.Create; lP.Clear; |
|
#3
|
|||
|
|||
|
Цитата:
Я не уверен, что до конца понял что ты имел ввиду, но посыл текста StartFTP и Hello возвращает на клиента сообщения, соответственно, о том, что фтп запушено и Hello, i am your server. При этом на StartFTP функция запуска FTPServer выполняется без нареканий. |
|
#4
|
|||
|
|||
|
Цитата:
на сколько я понял из ошибок SendText(lp) не сработает с сокетом... TStrings and String не совпадут... |
|
#5
|
||||
|
||||
|
Мда, срочно учить матчасть.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
homeknight (03.04.2012)
| ||
|
#6
|
|||
|
|||
|
Может направишь в нужное русло?) Я понимаю, что туплю где-то, но прогу мне надо дописать все же...
да и вобще, я просто не доковырял до ума код, скопированный из блога зет. lp мне по сути не нужен... Код:
ServerSocket1.Socket.Connections[0].SendText(ExtractFileName(string(NameProc))); Последний раз редактировалось homeknight, 04.04.2012 в 00:04. |
|
#7
|
||||
|
||||
|
В этом коде ошибки не видно.
|