Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

TELNET

На практике ваши возможности лимитируются тем уровнем доступа, которым задан для вас администратором удаленной системы. Во всяком случае вы должны иметь свой идентификатор ID (userid или username) и пароль для входа в систему.

В то же время, только относительно небольшое количество компьютеров в Internet позволяют свободный доступ через TELNET. Использование TELNET Чтобы подключиться к удаленной машине в Internet и произвести те или иные действия в ней, запустите программу telnet, которая является пользовательским интерфейсом протокола TELNET (в данном случае речь идет о вводе команды на UNIX или UNIX-подобных системах, о работе программ-клиентов для telnet на других платформах будет сказано отдельно).

Формат команды (не полная, но достаточная для практики, версия) telnet host [port]

где
host - официальное доменное имя машины или ее псевдоним (alias), или ее IP-адрес в виде цифр, разделенных точками; port - определяет номер порта (адрес приложения). Если номер порта не задан, то принимается номер порта TELNET по умолчанию - 23.

Если команда telnet используется без аргументов, тогда вводится командный режим, о котором сигнализирует подсказка

telnet >

В этом режиме доступа и выполняются следующие основные команды:

open host [-port], - открывает соединение с названной системой; close - закрывает TELNET соединения и возвращает вас в командный режим; quit - заканчивает все открытые TELNET соединения и выводит вас из telnet;

! [команда] - выполнение отдельной команды в shell на локальной системе; status - показывает текущий статус telnet;

? [команда] - получение помощи. Если аргумента нет, то telnet выдает список всех своих команд. Возможные сообщения об ошибках

Unknown Host 1. Имя или адрес были набраны неправильно Connection Refused 1. Удаленный компьютер функционирует с ошибками Connection Dropped Проблема с сетью или удаленным хостом, приведшая к закрытию соединения
 

Особенности

Порой весьма сложно закрыть TELNET-соединения, например, из-за резкого замедления прохождения IP-пакетов или разрыва связи по выделенной линии. Лучший совет - внимательно читать все инструкции, которые появляются, когда вы делаете login в систему. Если же на экране нет ничего, что могло бы помочь, попробуйте одну из этих команд:

exit, quit, logout, //end, end, leave, bye, 
      disconnect, goodbye, ciao, Ctrl-D, или Ctrl-Z.

В последнем случае на ряде платформ Ctrl-Z переводит ваше TELNET соединение в фоновый режим с выводом номера процесса, после чего желательно оборвать этот процесс командой

kill IDprocess

Если перечисленные команды не приводят к нужному результату, то остается Ctrl-] или Ctrl-^, которые заканчивают TELNET соединение. Это вернет Вас в режим подсказки telnet>. Введите quit или exit после telnet>, этим Вы закончите свой сеанс.

Некоторые примеры и адреса

unit

Unit1; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShlObj, Buttons; //необходимые константы const

LM20_NNLEN = 12; SHPWLEN = 8; SHI50F_RDONLY = 1; SHI50F_FULL = 2; STYPE_DISKTREE = 0; MaxNetArrayItems = 512; //формируем тип для записи с необходимыми параметрами type

//для Win'9x TShareInfo50 = packed

record

shi50_netname: array

[0..LM20_NNLEN] of

Char; //сетевое имя shi50_type: Byte; //тип ресурса shi50_flags: Short; //флаг доступа shi50_remark: PChar; // комментарий shi50_path: PChar; // путь к ресурсу shi50_rw_password: array

[0..SHPWLEN] of

Char; //пароль полного доступа shi50_ro_password: array

[0..SHPWLEN] of

Char; //пароль "только чтение" доступа end

; TShareEvent = record

//информация о сетевом ресурсе Res: Integer; ReadOnlyPassword: string

; FullAccessPassword: string

; Comments: string

; Path: string

; end

; < A name = form > < / A > TForm1 = class

(TForm) edComputerNetName: TEdit; Button1: TButton; ComboBox1: TComboBox; BitBtn1: TBitBtn; BitBtn2: TBitBtn; lbReadOnlyPassword: TLabel; edReadOnlyPassword: TEdit; lbFullAccessPassword: TLabel; edFullAccessPassword: TEdit; lbComments: TLabel; edComments: TEdit; lbPhysicalPath: TLabel; edPhysicalPath: TEdit; Label1: TLabel; Label2: TLabel; procedure

Button1Click(Sender: TObject); procedure

BitBtn1Click(Sender: TObject); procedure

BitBtn2Click(Sender: TObject); private

{ Private declarations } procedure

FillShareEnum(Items: TStrings); function

GetComputerNetName: string

; function

GetShareInfo(ComputerNetName, ResourceNetName: string

): TShareEvent; procedure

ConnectAdmin; public

{ Public declarations } end

; var

Form1: TForm1; function

NetShareGetInfo(const

pszServer: PChar; const

pszNetName: PChar; sLevel: SmallInt; pbBuffer: Pointer; cbBuffer: Word; var

pcTotalAvail: Word): DWORD; stdcall

; External

'svrapi.dll' name 'NetShareGetInfo'; function

NetShareEnum(const

pszServer: PChar; sLevel: SmallInt; pbBuffer: Pointer; cbBuffer: Word; var

pcEntriesRead: Word; var

pcTotalAvail: Word): DWORD; stdcall

; external

'svrapi.dll'; implementation

{$R *.DFM} procedure

TForm1.ConnectAdmin; var

CompName: string

; Res: Integer; lpNetResource: TNetResource; ComputerName: array

[0..MAX_COMPUTERNAME_LENGTH] of

Char; BufSize: Integer; begin

//получим имя локальной машины BufSize := MAX_COMPUTERNAME_LENGTH + 1; GetComputerName(@ComputerName, BufSize); CompName := string

(ComputerName); //если имя локальной машины совпадает с сетевым именем машины, //значит идет запрос о сетевом ресурсе локальной машины - //в этом случае ADMIN$ не нужен if

AnsiUpperCase(CompName) = AnsiUpperCase(edComputerNetName.Text)ThenExit; //заполним нолями значение указателя ZeroMemory(@lpNetResource, SizeOf(lpNetResource)); //укажем нужные значения with

lpNetResource do

begin

dwType := RESOURCETYPE_ANY; lpRemoteName := ''; lpRemoteName := PChar('' + edComputerNetName.Text + 'ADMIN$' + #0); end

; //Сезам, откройся! Res := WNetAddConnection3(Application.Handle, lpNetResource, nil

, nil

, CONNECT_INTERACTIVE); //Сезам, к сожалению не открылся... if

not

(Res = NO_ERROR) then

begin

ShowMessage('With out connected resource ''ADMIN$'' a work impossible!'); Application.Terminate; end

; end

; function

TForm1.GetShareInfo(ComputerNetName, ResourceNetName: string

): TShareEvent; var

pbBuffer: ^TShareInfo50; //указатель на буфер Buf: TShareInfo50; //сам буфер Res: Integer; pcTotalAvail: Word; //количество считанных байт begin

with

Result do

//почистим результат функции begin

res := 0; ReadOnlyPassword := ''; FullAccessPassword := ''; Comments := ''; Path := ''; end

; FillChar(Buf, SizeOf(Buf), #0); //заполним буфер нолями //ничего не укажем о нашем буфере и выполним функцию, в результате чего //получим в переменную pcTotalAvail количество считанных байт. NetShareGetInfo(PChar(ComputerNetName), PChar(ResourceNetName), 50, nil

, 0, pcTotalAvail); //инициализируем буферный указатель и дадим ему нужное количество памяти GetMem(pbBuffer, pcToTalAvail); //поместим в буфер имя сетевого ресурса, зачем не знаю - имя мы уже и так //указываем, но без этого функция почему-то не работает, по крайней мере у меня StrPCopy(pbBuffer^.shi50_netname, ResourceNetName); //выполним функцию еще раз уже указав параметры буфера Res := NetShareGetInfo(PChar(ComputerNetName), PChar(ResourceNetName), 50, pbBuffer, pcTotalAvail, pcTotalAvail); if

Res = 0 then

//все в порядке begin

//передадим данные из указателя в "обычную" переменную Buf := pbBuffer^; //заполним результат полученными значениями Result.ReadOnlyPassword := string

(Buf.shi50_ro_password); Result.FullAccessPassword := string

(Buf.shi50_rw_password); Result.Comments := string

(Buf.shi50_remark); Result.Path := string

(Buf.shi50_path); end

; //освободим указатель FreeMem(pbBuffer); end

; procedure

TForm1.FillShareEnum(Items: TStrings); var

ShareInfo: array

[0..MaxNetArrayItems - 1] of

TShareInfo50; EntriesRead, TotalAvial: Word; Res: Integer; N: Integer; begin

Items.Clear; //почистим Items FillChar(ShareInfo, SizeOf(ShareInfo), #0); //заполним буфер нолями Res := NetShareEnum(PChar('' + edComputerNetName.Text), 50, @ShareInfo, SizeOf(ShareInfo), EntriesRead, TotalAvial); //имя сетевой машины возьмем из строки ввода, //предварительно озаглавив его двумя обратными слэшами if

Res = No_Error then

//функция выполнена без ошибок for

N := 0 to

EntriesRead - 1 do

//пройдемся по буферу считанных имен ресурсов if

not

(string

(ShareInfo[N].shi50_netname) = '') then

Items.Add(string

(ShareInfo[N].shi50_netname)); //добавим имя машины в список end

; function

TForm1.GetComputerNetName: string

; var

RootItemIDList: PItemIDList; //идентификатор объекта в пространстве имен проводника BrowseInfo: TBrowseInfo; //структура, в которой содержится информация о диалоге Buffer: PChar; //сюда получим имя компьютера begin

Result := ''; //получим нужный идентификатор PItemIDList, CSIDL_NETWORK - в сетевом окружении if

not

(SHGetSpecialFolderLocation(0, CSIDL_NETWORK, RootItemIDList) = NO_ERROR) then

Exit; //подготовим буфер, в который получим имя компьютера GetMem(Buffer, Max_Path); FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); //подготовим структуру TBrowseInfo with

BrowseInfo do

begin

{With BrowseInfo} hwndOwner := Application.Handle; //хозяин окна - наше приложение pidlRoot := RootItemIDList; //полученный ранее идентификатор // объекта в списке объектов проводника pszDisplayName := Buffer; //имя компьютера будем принимать в Buffer lpszTitle := 'Подключенные компьютеры'; //заголовок диалога ulFlags := BIf_BROWSEFORCOMPUTER; //будут показаны имена только компьютеров end

; {With BrowseInfo} //выполним нужную функцию if

SHBrowseForFolder(BrowseInfo) = nil

ThenExit; Result := string

(Buffer); //вот оно - сетевое имя компьютера FreeMem(Buffer); end

; procedure

TForm1.Button1Click(Snder: TObject); begin

edComputerNetName.Text := GetComputerNetName; FillShareEnum(ComboBox1.Items); ComboBox1.ItemIndex := 0; end

; procedure

TForm1.BitBtn1Click(Sender: TObject); var

ShareEvent: TShareEvent; begin

if

(edComputerNetName.Text = '') or

(ComboBox1.Text = '') then

begin

edComputerNetName.SetFocus; Exit; end

; ConnectAdmin; ShareEvent := GetShareInfo('' + edComputerNetName.Text, ComboBox1.Text); edReadOnlyPassword.Text := ShareEvent.ReadOnlyPassword; edFullAccessPassword.Text := ShareEvent.FullAccessPassword; edComments.Text := ShareEvent.Comments; edPhysicalPath.Text := ShareEvent.Path; end

; procedure

TForm1.BitBtn2Click(Sender: TObject); begin

Close; end

; end

.

Другие ресурсы, доступные через TELNET

ndlc.occ.uky.edu или 128.163.38.10(Login: nolc)

База данных дистанционного образования
acsvax.open.ac.uk
или 137.108.48.24
(Username: ICDL, Acconut Code: usa Password: aaa)

Open University(UK)
newton.dep.anl.gov или 130.292.92.50(Login: bbs)
BBS для тех, кто преподает / изучает естественные науки,
математику

martini.eecs.umich.edu 3000
или 141.212.99.9 3000 - информация о городах США,
население, географическое положение и др.

locis.loc.gov или 140.147.254.3
marvel.loc.gov или 140.147.2.69

библиотека конгресса США
e - math.ams.com или 130.44.1.100(Login / Password: e - math)
американское матем.общество, BBS,
програмное обеспечение, обзоры.

gemm.com
база данных о CD и музыкальных клубах
enews.com(Login: enews)
электронные журналы(выберите Elec.Serials)
rusinfo.rus.uni - stuttgart.de или 129.69.1.12(Login: info)
Предлагает: журналы, UNIX - материалы, книги и др.
culine.colorado.edu 859 / 128.138.129.170 859
Расписание NBA
culine.colorado.edu 860 / 128.138.129.170 860
Расписание NHA
Archie(поиск нужных файлов
  по всем анонимным FTP серверам)
elnet archie.sura.net or

128.167.254.194(Login: archie) archie.unl.edu or

129.93.1.14 archie.ans.net or

147.225.1.10 archie.rutgers.edu or

128.6.18.15

Здесь приведены только Archie-серверы, расположенные в США, более подробный список приведен в разделе о FTP.

Gopher
telnet consultant.micro.umn.edu или 134.84.132.4
infoslug.ucsc.edu или 128.114.143.25[INFOSLUG]
infopath.ucsd.edu(Login: infopath)
Netfind User Lookup
(поиск адреса, места работы пользователя и т.п.)
telnet bruno.cs.colorado.edu
или 128.138.243.150(Login: netfind)
cobber.cord.edu или 138.129.1.32
pascal

.sjsu.edu или 130.65.86.15 mudhoney.micro.umn.edu или 134.84.132.7 redmont.cis.uab.edu или 138.26.64.4 ds.internic.net или 198.49.45.10 netfind.oc.com или 192.82.215.88 archie.au или 139.130.4.6 netfind.anu.edu.au или 150.203.2.14 netfind.if

.usp.br или 143.107.249.132 netfind.ee.mcgill.ca или 132.206.62.30 malloco.ing.puc.cl или 146.155.1.43 netfind.vslib.cz или 147.230.16.1 nic.nm.kr или 143.248.1.100 lincoln.technet.sg или 192.169.33.6 nic.uakom.sk или 192.108.131.12 monolith.cc.ic.ac.uk или 155.198.5.3 lust.mrrl.lut.ac.uk или 158.125.220.7 dino.conicit.ve или 150.188.1.10 Whois Services поиск по ключевому слову адреса в Internet) telnet rs.internic.net или 198.41.0.5(Login: whois) info.cnri.reston.va.us 185(Knowbot Info Serv.) garam.kreonet.re.kr или 134.75.30.11(Login: nic) paradise.ulcc.ac.uk или 128.86.8.56(Login: dua) WAIStation(Wide Area Information Service) telnet quake.think.com или telnet 192.31.181.1(Login: swais) wais.com или telnet 192.216.46.98 swais.cwis.uci.edu или 128.200.15.2 sunsite.unc.edu или telnet 198.86.40.81 info.funet.fi или 128.214.6.100(Login: info) wais.nis.garr.it или 192.12.192.10(Login: wais)

Программы-клиенты

Работа с TELNET возможна и с помощью программ-клиентов, функционирующих под более употребительными операционными системами DOS и/или MS-Windows. Один из примеров - free-пакет NCSA Telnet для DOS или WinQVT для Windows.

Обычно пакеты снабжены подробной информацией для инсталляции и тщательной настройки. Если и возникают проблемы, то они связаны больше с таблицами кодировок кириллицы или адекватной реакцией от нажатия комбинаций клавиш или при вызове таких программ как deco или Midnight Commander под UNIX.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com