вопрос по сокетам(winsock 1, 2) . Передачу данных никогда делать не пробовал. пользовался компонентами. решил попробовать и нифига не получаеться. конект есть, а данные или не передаются или не принимаются. код сервера: Code: const port = 256; fname = 'c:\BUF.txt'; var WSAData:TWSAData; sock:TSocket; SAddr:TSockAddr; size_sa:integer; buf:array[1..255] of char; f:text; begin assign(f,fname); rewrite(f); if WSAStartup($202,WSAData)<>0 then begin writeln('startup error...'); exit; end; SAddr.sin_family:=AF_INET; SAddr.sin_port:=htons(port); sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); if sock = INVALID_SOCKET then begin writeln('socket error...'); exit; end; if bind(sock,@SAddr,sizeof(SAddr))<>0 then begin writeln('bind error...'); exit; end; size_sa:=sizeof(SAddr); listen(sock,1); accept(sock,@SAddr,@size_sa); recv(sock,buf,sizeof(buf),0); append(f); writeln(f,buf); closesocket(sock); close(f); WSACleanup; writeln('press any key to exit...'); end. Код клиента: Code: port = 256; ip = '192.168.10.33'; var WSAData:TWSAData; sock:TSocket; SAddr:TSockAddr; i,size_sa:integer; buf:array[1..255] of char; begin if WSAStartup($202,WSAData)<>0 then begin writeln('startup error...'); exit; end; SAddr.sin_family:=AF_INET; SAddr.sin_addr.S_addr:=inet_addr(pchar(ip)); SAddr.sin_port:=htons(port); sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); if sock = INVALID_SOCKET then begin writeln('socket error...'); exit; end; size_sa:=sizeof(SAddr); if connect(sock,@SAddr,size_sa)<>0 then begin writeln('error connect...'); exit; end; for i:=1 to 26 do buf[i]:=char((ord('a')-1)+i); send(sock,buf,sizeof(buf),0); writeln(buf); closesocket(sock); WSACleanup; writeln('press any key for exit...'); end.
как разбить строку вида 192.168.0.1 на 192 168 0 1 . И как отсекать только последнюю часть ? т.е. (1) ? Чтоб в результате получать 192.168.0. Спасибо .
Если конечно ты подразумевал работу со строками, то вот: Code: //удаляет все точки из строчки (рифма=)) function DelPoints(st:string):string; var i:integer; begin for i:=1 to length(st) do if st[i]='.' then st[i]:=' '; result:=st; end; //удаление последнего числа после точки function DelEnd(st:string):string; var i:integer; begin for i:=length(st) downto 1 do if st[i]='.' then begin result:=copy(st,1,i);//В данном случае точка в конце остается как ты и просил, // ну а так result:=copy(st,1,i-1);её не будет break; end; end; //пример использования procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:=Edit1.Text; Edit2.Text:=DelPoints(s); Edit3.Text:=DelEnd(s); end;
Ты что хочешь программу написать, которая бы это определяла? Если да то тебе нужно научиться работать с заголовками PE файлов, поскольку по EP(entry point) можно определить откуда начинается запуск файла. Дак вот если файл-результат работы склейщика, то запускается сначала движок джойнера (стаб). Поэтому если хошь сделать своего рода детектор, то нужно вести базу сигнатур (т.е известные стабы). Конечно нужно учитывать, что файл может быть еще и закриптованным! А если просто хочешь визуально определить, то самый простой способ: берешь любой редоктор exe файлов, загружаешь и смотришь секции. Если новичок в этом можешь начать сResourceHacker...
Насколько я понял ты хочешь из строки 192.168.0.1 получить 4 числа. Code: procedure getip(ip:string; var a,b,c,d:byte); // ip - ip адрес в строковом формате, a,b,c,d - искомые числа var i:byte; x:array[0..3]of byte; begin for i:=0 to 3 do begin x[i]:=0; while (ip<>'') and (ip[1]<>'.') do begin x[i]:=x[i]*10+strtoint(ip[1]); delete(ip,1,1); end; if (ip<>'') and (ip[1]='.') then delete(ip,1,1); end; a:=x[0]; b:=x[1]; c:=x[2]; d:=x[3]; end;
Можно ли выгрузить Антивирус Касперского ? пробовал следующие методы Code: winexec('cmd.exe /C taskkill /F /IM avp.exe /T',sw_hide); Так же пытался Code: function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess( OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; Не помогает ... Спасибо .
Его можно ведь просто вырубить без выгрузки, просто поставив на ПК например дату 01,01,1990 и каспер 7 вырубается
Если поменять дату, он просто выдаст сообщение о некоректной дате и перестанет обновляться, но все равно будет работать, выгрузить его таким способом не получится.
в свойстве Picture добавляешь картинку и в диологовом окне открытия прописываешь полный путь к ней. например http://forum.antichat.ru/antichat/pic/logo.gif
У меня такая проблема... хочу отправить письмл с вложением, пользовался компонтом IdSMTP всё нормально работает, но когда подключение не прямое,а через прокси, то ничего не выходит... что делать?
Проблема банальна, но ответа никак и нигде не могу найти. Суть. Как проверить существует ли директория на Ftp сервере? Использую Delphi 7 и Indy10. Пытался реализовать через DirectoryExists, но он всегда возвращает False. Мне надо проверка есть ли директория тогда IdFtp1.ChangeDir('/Logs_'+ip); а если нет то IdFTP1.makeDir('Logs_'+ip); IdFTP1.ChangeDir('/Logs_'+ip); Но не знаю как проверить есть данная директория на Ftp. Буду очень благодарен кто подскажет или скажет в каком направлении копать.