Вопрос № 162276: Написал программу на Delphi 7. Использовал Задачник http://www.ptaskbook.com 73 задание. Дан строковый файл, содержащий даты в формате: dd/mm/yyyy, надо расположить даты в порядке убывания. <b>var f0,f1:file of string</b>; Выделя...
Вопрос № 162316: Имеется исходник сканера диапазона ip адресов на открытый порт, в нем диапазон присваивается так: scandiapazon('192.168.1.','1','255');
192.168.1. - маска 1 - начальный ip 255 - конечный ip В результате просканя...
Вопрос № 162.276
Написал программу на Delphi 7.
Использовал Задачник http://www.ptaskbook.com 73 задание.
Дан строковый файл, содержащий даты в формате: dd/mm/yyyy, надо расположить даты в порядке убывания.
var f0,f1:file of string; Выделяется красным, а var f0,f1:text; не работает.
Приложение:
Отправлен: 11.03.2009, 22:18
Вопрос задал: Алексей Л. (статус: 1-й класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Faustofel
Здравствуйте, Алексей Л.! нельзя file of string но можно file of string[100]
Ответ отправил: Faustofel (статус: 7-й класс)
Ответ отправлен: 12.03.2009, 00:26
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245276 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Отвечает: Влaдимир
Здравствуйте, Алексей Л.! Цикл while not EOF(f1) do бесконечный. Процедура read читает только первую строку. Для чтения строк используйте процедуру readln.
Ответ отправил: Влaдимир (статус: 4-й класс)
Ответ отправлен: 12.03.2009, 20:20
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245300 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 4
Вопрос № 162.316
Имеется исходник сканера диапазона ip адресов на открытый порт, в нем диапазон присваивается так: scandiapazon('192.168.1.','1','255'); 192.168.1. - маска 1 - начальный ip 255 - конечный ip В результате просканятся адреса от 192.168.1.1 до 192.168.1.255
Прошу помочь переделать так чтобы адресса брались не по этой маске а из memo или стринглиста.
Приложение:
Отправлен: 12.03.2009, 19:12
Вопрос задал: Akahaos (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Genia007
Здравствуйте, Akahaos! Вы пишите что вопрос отпал, но я всё - таки дам ответ для других читателей рассылки. На форму я добавил ещё один memo, куда вводятся адреса в стандартном виде.
type TForm1 = class(TForm) Button1: TButton; ProgressBar1: TProgressBar; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
function LookupName(host: string): TInAddr
; var HostEnt: PHostEnt; InAddr: TInAddr; begin if host[4]='.' then InAddr.s_addr := inet_addr(PChar(host)) else begin HostEnt := gethostbyname(PChar(host)); FillChar(InAddr, SizeOf(InAddr), 0); if HostEnt <> nil then begin with InAddr, HostEnt^ do begin S_un_b.s_b1 := strtoint(h_addr^[0]); S_un_b.s_b2 := strtoint(h_addr^[1]); S_un_b.s_b3
:= strtoint(h_addr^[2]); S_un_b.s_b4 := strtoint(h_addr^[3]); end; end end; Result := InAddr; end;
procedure ScanDiapazon; const PortNum = 135; var i, j, s, opt, index: Integer; FSocket: array [0..39] of TSOCKET; busy : array [0..39] of boolean; masks : array [0..39] of integer; addr : TSockAddr; hEvent : THandle; fset : TFDset; tv : TTimeval; GInit
Data : TWSADATA; begin Form1.ProgressBar1.Max:= {StrToInt(endip)}form1.Memo2.Lines.Count - 1; WSAStartup(MAKEWORD(2,0), GInitData);
index:= 40; hEvent := WSACreateEvent(); while i < form1.Memo2.Lines.Count - 1 do begin ///Запуск сканирования портов for j:= 0 to index do busy[j]:= false;
for
j:= 0 to index do begin if i = form1.Memo2.Lines.Count - 1 then begin index:= j - 1; break; i:= i - 1; end; FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT); addr.sin_addr := LookupName(form1.Memo2.Lines.Strings[i]); connect(FSocket[j], @addr, sizeof(ad
dr)); Application.ProcessMessages; if WSAGetLastError() = WSAEINPROGRESS then begin closesocket (FSocket[j]); busy[j]:= true; end; masks[j]:= i; i:= i + 1; end;
FD_Zero(fset); for j := 0 to index do begin if busy[j] <> true then FD_SET (FSocket[j], fset); end; Application.ProcessMessages;
tv.tv_sec := 1; tv.tv_usec := 0; s:= select (1, nil, @fset, nil, @tv); Application.ProcessMessages;
for j := 0 to index do begin if busy[j] then continue; if FD_ISSET (FSocket[j], fset) then begin s:= Sizeof(Opt); opt:= 1; getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s);
if opt = 0 then form1.Memo1.Lines.Add(form1.Memo2.Lines.Strings[j] + ' - порт открыт'); end; closesocket(FSocket[j]); end; Form1.ProgressBar1.Position:= i; end; WSACloseEvent(hEvent); Form1.Memo1.Lines.Add('Сканирование закончено...'); end;
procedure TForm1.Button1Click(Sender: TObject); begin memo1.Clear; scandiapazon; end;
end.
--------- Помогли тебе, помоги и ты.
Ответ отправил: Genia007 (статус: Студент)
Ответ отправлен: 14.03.2009, 14:22
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245334 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.