Delphi програм POST аргыг (Indy) ашиглан сервер рүү өгөгдөл илгээдэг. Delphi-д ашигласан Indy бүрэлдэхүүн хэсгүүд

Indy бол янз бүрийн сүлжээний програмуудыг хөгжүүлэх боломжийг олгодог нэлээд хүчирхэг бүрэлдэхүүн хэсгүүдийн багц юм. Энэ зааварт би TIdTCPClient болон TIdTCPServer бүрэлдэхүүн хэсгүүдийг ашиглан клиент-серверийн програмуудыг хэрхэн үүсгэх талаар танд хэлэх болно.

Юуны өмнө би эдгээр бүрэлдэхүүн хэсгүүдийн хоёр чухал давуу талыг тэмдэглэхийг хүсч байна. Тэдгээрийн хамгийн чухал нь multithreading буюу олон цөмт процессортой компьютер дээрх серверийн программын гүйцэтгэлд сервер нь үйлчлүүлэгч бүрт тусдаа thread үүсгэдэг гэсэн үг юм. Хоёр дахь давуу тал нь ашиглахад хялбар байдал юм. Энгийн клиент-сервер програм бичихэд 10-20 мөр код хангалттай. Энэхүү бүрэлдэхүүн хэсгүүдийн багц нь стандарт Delphi угсралтад байдаг.

За бичье энгийн програм, энэ нь үйлчлүүлэгчээс сервер рүү мессеж дамжуулах боломжийг олгодог. Сервер үүсгэж эхэлцгээе.
Маягтын "Indy серверүүд" табаас IdTCPServer бүрэлдэхүүн хэсгийг байрлуулцгаая. Бид энэ бүрэлдэхүүн хэсгийн бүх тохиргоог маягтын OnCreate үйл явдалд ажиллах үед хийх болно:
IdTCPServer1.DefaultPort:= 12345;
IdTCPServer1.Active:= үнэн;
Энд бүх зүйл энгийн байдаг - бид сервер ажиллах портыг зааж, серверийг өөрөө идэвхжүүлдэг.

Үйлчлүүлэгчээс сервер дээр өгөгдөл хүлээн авахын тулд "OnExecute" тусгай арга хэмжээ байдаг. Энэ үйл явдал дараах байдлаар харагдаж байна.

Эхлэх
Төгсгөл;

Үйл явдлын агуулгыг дараах байдлаар засъя:
процедур TForm3.IdTCPServer1Execute(ACContext: TIdContext);
var
l:мөр; // бидний хүлээн авах мөр хувьсагч
Эхлэх
l:= AContext.Connection.IOHandler.ReadLn();
Memo1.Lines.Add(l);
Төгсгөл;

Одоо сервер дээр мессеж ирэнгүүт бид үүнийг l тэмдэгтийн хувьсагч руу бичээд олон мөрт текст талбарт гаргана.

Энэ нь серверийг бүтээх ажлыг дуусгахад гайхах зүйл биш юм. Бусдыг нь Инди бидний төлөө хийх болно. Үйлчлүүлэгч програмаас эхэлье. Энэ нь серверт холбогдож, түүн рүү мессеж илгээж, серверээс сална.

бүтээцгээе шинэ төсөл, "Indy Clients" таб дээрээс олох боломжтой IdTCPClient бүрэлдэхүүн хэсгийг маягт дээр байрлуул. Мөн бид энгийн Засвар болон товчлуурыг байрлуулах болно. Товчинд зориулж OnClick үйл явдлын зохицуулагчийг үүсгэцгээе, дотор нь бид дараах зүйлийг бичнэ.
IdTCPClient1.Port:= 12345;
IdTCPClient1.Host:= '127.0.0.1';
IdTCPClient1.Connect;
IdTCPClient1.IOHandler.WriteLn(Edit1.Text);
IdTCPClient1.Таслах;

Энэ кодыг OnCreate үйл явдалд оруулах шаардлагагүй. Хэрэв та хүсвэл энэ кодыг хүссэн газартаа байрлуулж болно.
Эхний мөрөнд бид портыг зааж өгөх бөгөөд серверийн програмд ​​заасан портыг зааж өгөх шаардлагатай, эс тэгвээс үйлчлүүлэгч серверийг олохгүй. Дараа нь бид серверийн IP хаягийг зааж өгнө. Сервер өөрөө аль алинд нь байрлаж болно дотоод сүлжээ, мөн алсаас. Сүүлчийн тохиолдолд холболтыг интернетээр дамжуулан хийх бөгөөд та интернетэд IP хаягийг зааж өгөх шаардлагатай болно.

Би "127.0.0.1" хаягийг зааж өгсөн бөгөөд энэ нь сервер нь үйлчлүүлэгчийн ажиллаж байгаа компьютер гэсэн үг юм. Энэ арга нь сүлжээний програмуудыг туршихад маш тохиромжтой.
Дараа нь бид холболт хийж, мессеж илгээж, салгах болно. Та мессежийн адил IP хаягийг Edit эсвэл дурын string хувьсагчаас авах боломжтой.

Үйлчлүүлэгчийн программын ажил мөн дууссан. Таны харж байгаагаар Инди бидний хувьд асар их ажил хийдэг бөгөөд энэ нь туршлагагүй програмист хүртэл өөрийн сүлжээний программыг бий болгох боломжийг олгодог.

UDP протокол нь дамжуулахад маш сайн мессеж, өөрөөр хэлбэл, та орон нутгийн чат гэх мэтийг зохион байгуулж болно. Би Delphi дахь UDP-тэй хийсэн хамгийн энгийн ажлын жишээг өгөхөөр шийдсэн.

Алхам алхмаар зааварчилгаа:

Би жишээ хэлсэн, гэхдээ намайг уучлаарай, би мөр бүрийг бичээгүй, учир нь ... Би ямар ч төвөгтэй зүйл олж харахгүй байна, хэн ч үүнийг ойлгож чадна.

Үнэндээ ямар нэг зүйл ойлгомжгүй байвал надаас асуулт асууж болно. Мөн энд бодит код байна:

ашигладаг
Windows, Мессеж, SysUtils, Хувилбарууд, Ангиуд, Графикууд, Хяналтууд, Маягтууд,
Харилцах цонх, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, IdSocketHandle;

төрөл
TForm1 = анги(TForm)
IdUDPClient1: TIdUDPClient;
IdUDPServer1: TIdUDPServer;
Товчлуур1: TBтовч;
Шошго1: TLabel;
журам FormCreate(Илгээгч: TObject);
процедур FormClose(Илгээгч: TObject; var Action: TCloseAction);
журам Button1Click(Илгээгч: TObject);
процедур IdUDPServer1UDPRead(AThread: TIdUDPLlistenerThread; AData: TBytes;
ABinding: TIdSocketHandle);
хувийн
(Хувийн мэдүүлэг)
олон нийтийн
(Нийтийн мэдүүлэг)
Төгсгөл;

var
Маягт1: TForm1;

($R *.dfm)
[b]//Мессеж илгээх журам
процедур TForm1.Button1Click(Илгээгч: TObject);
Эхлэх
хичээ
IdUDPClient1.Active:= Үнэн;
IdUDPClient1.Host:= "localhost";
IdUDPClient1.Connect;
хэрэв IdUDPClient1.Connected дараа нь
Эхлэх
IdUDPClient1.Send(TimeToStr(Time));
Label1. Caption:= "ok";
Төгсгөл;
IdUDPClient1.Active:= Худал;
Дохио, дуугаралт, дохио;
бусад
MessageDlg("Алдаа гарлаа =(", mtError, , 0);
Төгсгөл;
Төгсгөл;
[b]
//Асаах, унтраах. Маягтыг эхлүүлэх, хаах үед UDP сервер
процедур TForm1.FormClose(Илгээгч: TObject; var Action: TCloseAction);
Эхлэх
IdUDPServer1.Active:= Худал;
Төгсгөл;

процедур TForm1.FormCreate(Sender: TObject);
Эхлэх
IdUDPServer1.Active:= Үнэн;
Төгсгөл;

[b]//Өгөгдөл хүлээн авах үед серверийн хариу үйлдэл хийх журам
процедур TForm1.IdUDPServer1UDPRead(AThread: TIdUDPLlistenerThread;
AData: Тбайт; ABinding: TIdSocketHandle);
Var
i: Бүхэл тоо;
s: мөр;
Эхлэх
s:= "";
хичээ
i:= 0;
байхад (AData[i] 0) хийх
Эхлэх
s:= s + chr(AData[i]);
i:= i + 1;
Төгсгөл;
эцэст нь
Label1. Caption:= s;
Төгсгөл;
Төгсгөл;

Серж Досюков Майк Фам

Энэ нийтлэлд Indy иж бүрдэл болон Delphi 7-г ашиглан бие даасан вэб үйлчилгээг хэрхэн үүсгэх, мөн Delphi 7 SOAP-д суурилсан вэб үйлчилгээг дэмжихийн тулд Indy иж бүрдлийг хэрхэн ашиглахыг харуулна. Ард нь нэмэлт мэдээлэлВэб үйлчилгээг бий болгох талаар мэдээлэл авахыг хүсвэл Borland нийгэмлэгийн сайт дээрх Ник Ходжесын гайхалтай нийтлэлийг үзнэ үү: Вэб дээрх Шекспир.

Эрт орой хэзээ нэгэн цагт та бие даасан HTTP сервер болох вэб үйлчилгээг дэмждэг сервер үүсгэх хэрэгтэй болж магадгүй. Жишээлбэл, та Delphi ашиглан бүтээгдсэн n түвшний програмын хувьд SOAP-д суурилсан програмын сервер үүсгэхийг хүсч болно.

Оршил

Delphi-ийн онлайн тусламж нь маш сайн үйлчилгээ үзүүлдэг дараалсан зааварчилгааВэб үйлчилгээ, MIDAS сервер (COM, DCOM загвар) хэрхэн үүсгэх талаар, гэхдээ SOAP протокол дээр суурилсан бие даасан n түвшний MIDAS програмыг бий болгох талаар бараг мэдээлэл байхгүй байна.

Өмнө нь Дэйв Ноттаж хэвлүүлсэн. Энэ нийтлэлд SOAP-ийн дэмжлэгтэйгээр Delphi 6 дээр вэб үйлчилгээг хэрхэн бий болгох, Datamodule-ийн SOAP интерфэйсийг нийтлэх боломжтой гэсэн санааг тайлбарласан, өөрөөр хэлбэл энэ нийтлэл нь танд өөрийн n-шатлалыг хэрхэн үүсгэх талаар сурах боломжийг олгосон. MIDAS системүүд.

Borland-ийн Delphi 7 болон шинэ Indy иж бүрдэл нь энэ функцийг дэмждэг.

Гэсэн хэдий ч суурилуулсан дэмжлэгийг үл харгалзан энэ функцийг баримтжуулаагүй болно.

Борландын сүлжээний хурал дээр саяхан нийтлэгдсэн нийтлэлүүд болон Google сервер ашиглан вэбээс хайлт хийсэн нь зохиогчдод одоо байгаа кодыг Delphi 6-аас Delphi 7 руу хөрвүүлэх аргыг боловсруулах боломжийг олгосон. Гэхдээ бүх зүйл өөрийн цаг хугацаатай байдаг.

гол утга

Энэхүү нийтлэл нь гурван ангит цувралын эхний хэсэг юм. Үүнд үндсэн заалтуудыг тусгасан болно. Хоёр, гурав дахь хэсгийг зарим асуудал, тэдгээрийг шийдвэрлэх арга замд зориулах болно. Гол санааг тайлбарлаж эхэлцгээе.

  • бие даасан HTTP сервер байх;
  • Indy-г платформ болгон ашиглах;
  • SOAP протоколоор дамжуулан нийтлэхийг дэмжих;
  • SOAP DataModules-ийг нийтлэх чадвартай байх ба энэ нь танд SOAP/HTML дээр суурилсан өөрийн n түвшний сервер үүсгэх боломжийг олгоно.

HTTP сервер ба SOAP

Олон хүмүүс Indy-г мэддэг бөгөөд өмнө нь THTTPServer бүрэлдэхүүн хэсгүүдийг ашиглаж байсан. Энэ бүрэлдэхүүн хэсгийг өргөдлийн маягт дээр байрлуулахад хялбар байдаг, гэхдээ та үүнийг хэрхэн SOAP-ыг дэмжих вэ? "C:Program FilesBorlandDelphi7SourceIndy" лавлахаас та IdHTTPWebBrokerBridge.pas файлыг олох боломжтой. Энэ бол танд яг хэрэгтэй зүйл юм.

Энэ файл нь Indy файлын нэг хэсэг биш тул та үүнийг одоогийн төсөлдөө стандарт төслийн файл болгон оруулах хэрэгтэй. (Төслийг эмхэтгэхийн тулд танд IdCompilerDefines.inc файл хэрэгтэй болно.) Эдгээр файлуудыг одоогийн төслийн лавлах руу хуулсан байх ёстой. Хурдыг нэмэгдүүлэхийн тулд кодын өөрчлөлт шаардлагатай байж болох тул эдгээр файлуудыг Indy түгээлтээс тусад нь байлгах нь дээр.

Дараах нь TIdHTTPWebBrokerBridge гэж нэрлэгддэг SOAP пакетуудыг дэмжих зорилгоор өргөтгөсөн THTTPServer-ийн орлуулах бүрэлдэхүүн хэсгийн хэрэгжилтийг тайлбарласан болно. Энэ бүтэц нь TCustomHTTPServer-ээс өвлөн авсан анги бөгөөд үндсэн хүсэлтийг холбохыг дэмждэг.

Энэ ангид палитраас хандах боломжгүй тул та өөрийн кодыг ажиллуулахдаа үүнийг ердийн объект гэж тодорхойлох шаардлагатай болно.

Энэ объектыг SOAP-тай ажиллах боломжийг олгодог нэмэлт шинж чанаруудаас бусад тохиолдолд ердийн THTTPServer-тэй яг адилхан ашиглаж болно.
Гэсэн хэдий ч эхлээд шаардлагатай кодыг бэлтгэхийг харцгаая.

WebBroker болон Indy

Өмнө нь вэб үйлчилгээг бий болгож байсан хүмүүсийн хувьд та үүнийг ашигладаг гэдгийг мэддэг WebBroker. Delphi 7 нь Delphi 6-тай адил SOAP-г дэмжихийн тулд WebBroker архитектурыг ашигладаг.

Тиймээс та модуль үүсгэх хэрэгтэй TWebModuleДараах гурван бүрэлдэхүүн хэсгийг дотор нь байрлуул: THTTPSoapDispatcher, THTTPSoapPascalInvoker болон TWSDLHTMLPublish. Тэдгээрийг бүгдийг нь бүрэлдэхүүн хэсгийн палитрын WebServices табаас авах боломжтой. SOAPDispatcher-г SOAPPascalInvoker-тэй холбосны дараа өргөдлийн маягт бэлэн болно. Эцсийн үр дүн нь дараах зурагт үзүүлсэн шиг байх ёстой.

(модуль uWebModule.pas)

Энэ маягтын захиалгат кодыг өөрчлөх, ажиллуулах шаардлагагүй тул бүгдийг байгаагаар нь үлдээх нь дээр.

WebModule болон Indy

HTTP серверийг хэрэгжүүлэхэд шаардлагатай кодын нөгөө хэсэг рүү шилжье.

Таны харж байгаагаар TIdHTTPWebBrokerBridge нь RegisterWebModuleClass аргатай бөгөөд энэ нь танд өөрийн WebModule-ийг бүртгүүлж, серверт ашиглах боломжтой болгох боломжийг олгодог.

Тиймээс fServer серверийн объектыг үүсгэсний дараа та fServer.RegisterWebModuleClass (TwmSOAPIndy) анги руу залгахад л хангалттай.

Анхаарна уу. TIdHTTPWebBrokerBridge-ийн ердийн хэрэгжилтийн хувьд хүсэлт хүлээн авах бүрт TwmSOAPIndy объект үүсгэгдэнэ. Энэ шаардлагагүй нь ойлгомжтой. Тиймээс байнгын бүтээлийг хангахын тулд ангиудыг өөрчилж болно энэ объектынсервер объект байгаа цагт. Дэлгэрэнгүй мэдээллийг ангийн хэрэгжилтийн баримт бичигт хандахыг зөвлөж байна.

Сервер бэлэн үү?

Delphi 6-д ашигласан Indy бүрэлдэхүүн хэсгүүд.

Интернэтийн үндсэн үйлчилгээ, протоколуудаас гадна олон төрлийн нэмэлт үйлчилгээнүүд байдаг бөгөөд тэдгээрийн чадавхийг интернет хөгжүүлэгчид ихэвчлэн ашигладаг. Нэмж дурдахад хөтөч ашиглан мэдээллийг харуулах чадвар нь интернетийн хэрэглээний хувьд үргэлж хүлээн зөвшөөрөгдөх шийдэл биш юм. Энэ тохиолдолд өгөгдөл солилцохын тулд интернетийн дэд бүтцийг ашиглах, жишээлбэл, Delphi-д боловсруулсан илүү төвөгтэй клиент програмуудаар дамжуулан мэдээллийг харуулах нь зүйтэй юм.

Стандарт вэб серверт ороогүй тусгай серверийн логикийг хэрэгжүүлэх хэрэгтэй гэж бодъё. Энэ ангиллын асуудлыг шийдэхийн тулд Delphi нь Nevrona Designs (http://www.nevrona.com/Indy/)-ийн Internet Direct (Indy) номын санг агуулдаг. Borland Delphi-д зориулж тусгайлан боловсруулсан энэхүү номын сан нь аль хэдийн найман хувилбартай бөгөөд хамгийн сүүлийнх нь багтсан болно шинэ хувилбарДелфи. Бүрэлдэхүүн хэсгүүд нь үйлчлүүлэгч (Indy Client), сервер (Indy Servers) болон туслах (Indy Misc) гэсэн гурван бүлэгт хуваагддаг.

Indy Clients болон Indy Servers

Олонхи Indy бүрэлдэхүүн хэсгүүд Client болон Indy серверүүд нь протокол, үйлчилгээний клиент ба серверийн хэсгүүдэд тохирох хосууд (TunnelMaster, TunnelSlave зэрэг серверт суурилсан үндсэн бүрэлдэхүүн хэсгүүдээс бусад) бөгөөд TCP/IP, UDP, NNTP, SMTP, FTP , HTTP, түүнчлэн ECHO, FINGER, WHOIS гэх мэт үйлчилгээнүүд.

Indy клиентийн бүрэлдэхүүн хэсгүүдийг сокет ашиглан бичдэг. Үйлчлүүлэгчийн талын залгуур нь сервертэй холбогдохыг шаарддаг. Хэрэв холболт хийгдсэн бол үйлчлүүлэгч болон сервер хоёр мессеж солилцож эхлэх боломжтой. Эдгээр мессежүүд нь өөр шинж чанартай боловч ихэвчлэн тодорхой протокол (жишээлбэл, HTTP) ашиглан солилцдог.

TIdTCPClient болон TIdTCPServer

Эдгээр бүрэлдэхүүн хэсгүүд нь сүлжээний үндсэн протоколуудын нэг болох TCP (Transmission Control Protocol) -ийг дэмжихэд ашиглагддаг бөгөөд TIdSMTP болон TIdFTP бүрэлдэхүүн хэсгүүдийн үндсэн анги юм. TIdTCPServer анги нь ThreadMgr шинж чанартай бөгөөд анхдагч нь тэг болно. TIdTCPServer идэвхжсэн үед ThreadMgr тэг байвал TIdThreadMgrDeafault анги нь далд хэлбэрээр үүсгэгдэнэ. Үгүй бол суулгасан процессын менежерийг ашигладаг.

TIdUDPClient болон TIdUDPServer

Эдгээр бүрэлдэхүүн хэсгүүдийг дэмжихэд ашигладаг сүлжээний протокол UDP (User Datagram Protocol) ба бусад хэд хэдэн Indy бүрэлдэхүүн хэсгүүдийн үндсэн ангиуд юм.

TIdChargenServer

Бүрэлдэхүүн хэсэг нь ихэвчлэн туршилтын зорилгоор санамсаргүй тэмдэг үүсгэхэд ашиглагддаг.

TIdDayTime болон TIdDayTimeServer

Бүрэлдэхүүн хэсгүүд нь цагийн үйлчилгээ үзүүлэхэд ашиглагддаг. Үйлчлүүлэгч хүсэлт гаргах бөгөөд сервер нь одоогийн огноо, цагийг мэдээлдэг.

TIdDNSResolver

Энэ нь DNS (Домэйн Нэрийн Үйлчилгээ) серверийн хүсэлтэд үйлчилдэг үйлчлүүлэгчийн бүрэлдэхүүн хэсэг юм. DNS серверийн асуулга нь компьютерийн нэрийг түүний IP хаягаар солих зориулалттай. TIdDNSResolver нь TIdUDPClient ангийн удам юм.

TIdDICTSсервер

Үйлчлүүлэгчид байгалийн хэлний толь бичигт хандах боломжийг олгодог TCP протокол дээр суурилсан сервер талын толь бичиг болох Dictionary Server Protocol (DICT)-ийг дэмждэг серверийн бүрэлдэхүүн хэсэг.

TIdDISCARDServer

Бичлэгийн серверийг дэмждэг серверийн бүрэлдэхүүн хэсэг. Бичлэгийг дибаг хийх, хэмжих хэрэгсэл болгон ашиглаж болно. Бүртгэлийн үйлчилгээ нь аливаа өгөгдлийг хүлээн авахыг хүссэн хүнд шууд дамжуулдаг.

TI dEcho болон TI dECHOServer

Бүрэлдэхүүн хэсгүүд нь сүлжээний эрүүл мэндийг шалгахад ихэвчлэн ашиглагддаг хариу үйлчилгээ үзүүлэх зорилготой юм. Үйлчлүүлэгч сервер рүү мессеж илгээдэг бол сервер нь мессежийг үйлчлүүлэгч рүү буцаана. Хэрэв мессеж эвдэрсэн бол сүлжээ буруу ажиллана.

TIdFinger болон TIdFingerServer

Бүрэлдэхүүн хэсгүүд нь хэрэглэгчээс системд байгаа бусад хэрэглэгчид байгаа эсэх талаар мэдээлэл авах боломжийг олгодог протоколоор хангах зорилготой юм. Зарим серверүүд ийм үйлчлүүлэгчийн хүсэлтийг хариуцдаг. Энэхүү хос бүрэлдэхүүн хэсгүүдийг ашигласнаар системд бусад хэрэглэгчид байгаа эсэхийг тодорхойлох үйлчлүүлэгчийн хүсэлтэд үйлчлэх боломжтой болно.

Бүрэлдэхүүн хэсэг нь файл дамжуулах протоколын бүрэн дэмжлэгийг агуулдаг - FTP (Файл дамжуулах протокол). Идэвхгүй, идэвхтэй өгөгдөл дамжуулах, GET, PUT, лавлах устгах, квот авах, файл, лавлах хэмжээ зэрэг үйлдлүүдийг дэмждэг. TI dFTP нь ажиллахын тулд TIdSimpleServer ангиллыг ашигладаг. FTP файл дамжуулах үед хоёрдогч TCP холболт нь өгөгдөл дамжуулахад нээгдэж, өгөгдөл дамжуулах үед хаагдана. Энэ холболтыг "өгөгдлийн холбоос" гэж нэрлэдэг бөгөөд дамжуулж буй файл бүрт өвөрмөц байдаг.

TIdGopher болон TIdGopherServer

Эдгээр бүрэлдэхүүн хэсгүүд нь орлуулсан сүлжээний протоколоор хангах зорилготой юм Сүүлийн үед WWW-ээс ( Дэлхий даяарВэб) HTTP протокол. Энэ протоколыг хэрэгжүүлдэг сервер нь шаталсан хуваарилагдсан баримт бичгийн урсгалыг дэмжих системийг хангадаг. DemosindyGopherClient болон demosindy GopherServer лавлахад байрлах энэхүү хос бүрэлдэхүүн хэсгүүдийг ашиглах жишээ нь энэ протоколыг ашиглан компьютер дээрээ байгаа файлууд, түүний дотор хаалттай файлуудын талаар дотоод сүлжээнд хэрхэн мэдээлэл өгөх боломжтойг харуулж байна.

TIdHostNameServer

Дотоод серверийн нэрийг үйлчлүүлэгчдэд дамжуулах зориулалттай серверийн бүрэлдэхүүн хэсэг.

TIdHTTP болон TIdHTTPServer

Бүрэлдэхүүн хэсгүүдийг HTTP сүлжээний протоколоор хангахад ашигладаг (GET, POST болон HEAD үйлдлүүд зэрэг 1.0 ба 1.1 хувилбаруудыг дэмждэг). Нэмж дурдахад, баталгаажуулалт болон прокси серверүүдийг ашиглахад дэмжлэг үзүүлдэг. Серверийн бүрэлдэхүүн хэсэг нь өгөгдсөн протоколыг дэмждэг өөр вэб серверт үйлчилгээ үзүүлэхэд ашиглагддаг. TIdHTTPServer нь күүки, төрийн удирдлага гэх мэт функцуудыг хэрэгжүүлэхэд тусалдаг.

TIdIcmpClient

Интернэт хяналтын мессежийн протоколыг (ICMP) хангах зорилготой үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь пинг үйлдлүүд болон сүлжээг хянахад ашиглагддаг.

MIME кодчилол, код тайлах, олон байт тэмдэгт дамжуулахад дэмжлэг үзүүлэх зэрэг шуудангийн протокол (POP)-ийг хангах зорилготой үйлчлүүлэгчийн бүрэлдэхүүн хэсэг.

TIdIMAP4Сервер

Сервер дээрх IMAP (Internet Message Access Protocol) ажиллагааг дэмжих зориулалттай серверийн бүрэлдэхүүн хэсэг. Протокол нь танд мессеж хайх боломжийг олгодог Имэйлсервер дээр. IMAP болон POP протоколуудын ялгаа нь POP протоколыг шаарддаг нэмэлт санах ойөгөгдөл хадгалах ба IMAP протокол нь үйлчлүүлэгчийн машины оронд серверт ханддаг. IMAP4 нь POP3-ыг орлох зорилгоор бүтээгдсэн боловч POP3 өнөөг хүртэл өргөн хэрэглэгддэг стандарт хэвээр байна.

TIdIRCS сервер

Интернэт дэх хамгийн түгээмэл хэрэглэгддэг үйлчилгээний үйл ажиллагааг дэмжихэд зориулагдсан серверийн бүрэлдэхүүн хэсэг бөгөөд үүнийг ихэвчлэн чат гэж нэрлэдэг. Бүрэлдэхүүн хэсэг нь үндсэн Барилгын тоосго нь IRC (Internet Relay Chat) серверт зориулсан.

TIdMappedPortTCP

Прокси серверт ихэвчлэн ашиглагддаг, зурагдсан портуудыг үүсгэхэд зориулагдсан серверийн бүрэлдэхүүн хэсэг. Энэ бүрэлдэхүүн хэсгийн аргууд нь нэг портыг нөгөө порт руу буулгах боломжийг олгодог. Жишээлбэл, 80-р портыг 3000-р порт руу буулгаж болох бөгөөд эхний порт руу (80-р порт) илгээсэн бүх хүсэлтийг хоёр дахь порт руу (3000 порт) дамжуулна.

TIdNNTP болон TIdNNTPSсервер

Эдгээр бүрэлдэхүүн хэсгүүд нь мэдээний үйлчилгээнд хэрэглэгддэг Сүлжээний мэдээ дамжуулах протоколыг (NNTP) дэмжихэд шаардлагатай. Үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь MIME кодчилол, декодчилол, олон байт тэмдэгтүүд болон өөр кодчилолуудын дэмжлэгийг агуулдаг. Серверийн бүрэлдэхүүн хэсэг нь танд мэдээний сервер үүсгэх боломжийг олгодог. TIdNNTPServer нь бүрэн хэмжээний мэдээллийн сервер биш, харин ийм серверийн үндсэн функцийг хангадаг бүрэлдэхүүн хэсэг гэдгийг анхаарах нь чухал юм.

TIdQOTD болон TIdQOTDServer

Бүрэлдэхүүн хэсгүүдийг "Өдрийн үнийн санал" үйлчилгээг үзүүлэхэд ашигладаг. Үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь өдөр тутмын үнийн саналыг авахын тулд серверийн бүрэлдэхүүн хэсэгтэй холбогддог. Серверийн жишээ бүр өвөрмөц ишлэлийн мэдээллийн санг агуулдаг.

Энгийн шуудан дамжуулах протокол (SMTP) програмуудад ашиглахад зориулагдсан үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь нэвтрэлт танилт, MIME кодчилол, код тайлах, олон байт тэмдэгтийн дэмжлэг үзүүлдэг.

SNTP (Энгийн сүлжээний цагийн протокол) - цагийн үйлчилгээ үзүүлэхэд зориулагдсан үйлчлүүлэгчийн бүрэлдэхүүн хэсэг. Тодорхойлохын тулд ямар ч цагийн үйлчилгээнд холбогдоход ашиглаж болно одоогийн огнооба цаг хугацаа.

TIdSimpleServer

Хөнгөн TCP серверээр хангадаг серверийн бүрэлдэхүүн хэсэг. Цэгээс цэгийн холболтыг зохион байгуулах боломжийг танд олгоно. Энэ нь нэг хэрэглэгчтэй сервер үүсгэхэд ашиглагддаг, өөрөөр хэлбэл нэг удаад зөвхөн нэг холболтоор үйлчлэх боломжтой. TIdTCPServer бүрэлдэхүүн хэсгээс ялгаатай нь энэ нь үйлчлүүлэгчдийн хүсэлтийг хүлээж, эдгээр хүсэлтийг боловсруулах үед хоёрдогч процессуудыг үүсгэдэггүй. Өөрөөр хэлбэл, хэрэв сервер нь үйлчлүүлэгчийн хүсэлтэд үйлчилж байгаа бөгөөд тухайн үед өөр үйлчлүүлэгч холбогдохоор холбогдож байгаа бол эхний хүсэлтийг боловсруулж дуустал хаагдах болно.

TIdTelnet болон TIdTelnetServer

Үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь консолын хэлэлцээр, баталгаажуулалт зэрэг өөр компьютер дээр алсын сессийг зохион байгуулахад ашиглагддаг. Харилцаа холбооны протокол нь сервертэй харилцан үйлчлэлцэж буй хүн байгаа гэж үздэг. Үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь дэлгэцийн дэмжлэг эсвэл терминалын эмуляцгүй, харин серверийн хэсэгтэй холболтыг хангадаг. Ихэвчлэн TIdTelnetServer серверийн протоколыг үйлчлүүлэгчидтэй харилцан үйлчлэхийн тулд текст интерфейс бүхий алсын мэдээллийн санг зохион байгуулахад ашигладаг.

TIdTime болон TIdTimeServer

Үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь цагийг тодорхойлох TIdSNTP бүрэлдэхүүн хэсгийн өөр хувилбар юм. Хоёр протоколын формат өөр гэдгийг анхаарах нь чухал юм. TIdTime нь RFC 868 формат дээр суурилдаг (дотоод UNIX OS стандартад цагийг буцааж, шаардлагатай бүх хөрвүүлэлтийг гүйцэтгэдэг). Серверийн бүрэлдэхүүн хэсэг нь DayTime сервертэй төстэй. Цагийн үйлчилгээг хэрэгжүүлэхэд ашиглаж болно орон нутгийн компьютер. Нэмэлт код шаардлагагүй, зүгээр л серверийн компьютерийн дотоод цагийн цагийг буцаах TIdTimeServer-ийн жишээг үүсгэ.

TIdTrivialFTP болон TIdTrivialFTPServer

Эдгээр бүрэлдэхүүн хэсгүүд нь энгийн файл дамжуулах протоколыг зохион байгуулахад шаардлагатай байдаг. Энэ протоколын клиент бүрэлдэхүүн хэсэг нь холбогдох серверийн бүрэлдэхүүн хэсэгтэй холбогдоход хэрэглэгддэг. Протокол нь хувийн, хөнгөн, орон нутгийн файл дамжуулах тохиолдлуудад, жишээлбэл, дотоод сүлжээн дэх эсвэл чиглүүлэгч рүү чиглүүлэгчийн хүснэгтийг ачаалах (байршуулах) зориулалттай. Энэ протоколын шинж чанар суларсан тул түүнийг баталгаажуулах алгоритм эсвэл бусад аюулгүй байдлын механизм ашиглах үед ашиглахыг зөвлөдөггүй. Энэхүү протоколын гол зорилго нь файлуудыг техник хангамжийн төхөөрөмжид өөрчлөх зорилгоор шилжүүлэх явдал юм.

TIdTunnelMaster болон TIdTunnelSlave

Серверийн туннелийн бүрэлдэхүүн хэсгүүдийг нэг физик (туннель) дээр олон логик холболтыг зохион байгуулахад прокси серверт ашигладаг. Эдгээр ангиудыг янз бүрийн зорилгоор ашиглаж болно, жишээлбэл, нууц бус сувгуудаар нууц холболтыг зохион байгуулах.

TIdWhois болон TIdWhoIsServer

Энэхүү үйлчлүүлэгчийн бүрэлдэхүүн хэсэг нь ямар ч стандарт Whois сервертэй холбогдож, домэйны талаарх мэдээллийг авах боломжийг танд олгоно. Серверийн бүрэлдэхүүн хэсэг нь NIC серверийн үндсэн функцийг хангадаг.

Indy Misc

Indy Miscellaneous Components палитр хуудсанд BASE64, UUE, Quoted Printable болон бусад нийтлэг имэйл харилцааны формат, кодлогч (MD2, MD4, MD5) зэрэг нууц үг болон цахим гарын үсэгэргэлт буцалтгүй (тайлахад хэцүү) хэлбэрээр, түүнчлэн бусад олон ашигтай бүрэлдэхүүн хэсгүүд, хэрэгслүүд нь интернетийн програмуудыг хөгжүүлэхэд ихэвчлэн ашиглагддаг.

TIdAntiFreeze

Indy бүрэлдэхүүн хэсгүүдийн блок дээр суурилсан алгоритмуудын улмаас холболт ажиллаж байх үед програм гацсан байх нь элбэг. Програмыг хөлдөхөөс урьдчилан сэргийлэхийн тулд харилцаа холбоог зохион байгуулахдаа хоёрдогч процесс (утас) ашиглахыг арилгахын тулд маягт дээр заасан бүрэлдэхүүн хэсгийг байрлуулахад хангалттай.

Энэхүү бүрэлдэхүүн хэсэг нь TCP/IP протоколын стекээс хүсэлтийг задлан шинжилж, гадаад холболт хаагдсан үед саатлын үед програм руу мессеж илгээх замаар ажилладаг бөгөөд энэ нь код ажиллаж байгаа мэт хуурмаг байдлыг бий болгодог. Бүрэлдэхүүн хэсэг нь хаагдсан холболтод зөвхөн үндсэн процесст нөлөөлдөг тул програмын хоёрдогч процесст TIdAntiFreeze ашиглах шаардлагагүй. TIdAntiFreeze бүрэлдэхүүн хэсэг нь мессежийг боловсруулахын тулд үндсэн процесс үе үе тасалддаг тул холболтыг удаашруулдаг гэдгийг анхаарна уу. Эндээс үзэхэд хөгжүүлж буй програм нь OnClick, OnPaint, OnResize гэх мэт мессежийг боловсруулахад хэт их цаг зарцуулахгүй байхыг анхаарах хэрэгтэй. Үүнийг тодорхой хэмжээгээр TIdAntiFreeze ангийн шинж чанараар удирдаж болно. Энэ бүрэлдэхүүн хэсгийг ашиглах нь заавал байх албагүй боловч програмын харааны интерфэйстэй холболтыг синхрончлох асуудлыг шийдэх боломжийг танд олгоно.

TIdDateTimeStamp

Интернет протоколууд өөр өөр огноо, цагийн форматыг ашигладагтай холбоотой огноо, цагийн математикийг гүйцэтгэх анги; Үүнээс гадна үйлчлүүлэгч болон серверүүд өөр өөр цагийн бүсэд байрлаж болно.

TIdIPWatch

Энэ нь компьютерийн IP хаягийн өөрчлөлтийг байнга хянаж байдаг таймер дээр суурилсан бүрэлдэхүүн хэсэг юм. Өөрчлөлт илэрсэн үед бүрэлдэхүүн хэсгүүдийн үйл явдлууд тохиолддог. Энэ бүрэлдэхүүн хэсэг нь ихэвчлэн компьютер интернет эсвэл бусад сүлжээнд холбогдсон эсэхийг илрүүлэхэд ашиглагддаг. Энэ тохиолдолд IP хаягийн өөрчлөлт нь шинэ сүлжээнд холбогдох үед DHCP (Динамик хостын тохиргооны протокол) серверээс өгсөн IP хаягтай холбоотой байж болно.

TIdLogDebug

Энэ бүрэлдэхүүн хэсгийн зорилго нь аливаа үйлчлүүлэгч эсвэл серверийн бүрэлдэхүүн хэсгийн үйл явдлыг таслан зогсоох, үйл явдлын бичлэгийг оруулах явдал юм заасан файл. Энэ бүрэлдэхүүн хэсэг нь Indy бүрэлдэхүүн хэсгүүдийг дибаг хийхэд маш хэрэгтэй.

TIdMessage

Бүрэлдэхүүн хэсэг нь мессежийг зөв тайлах эсвэл кодлохын тулд бусад бүрэлдэхүүн хэсгүүдтэй хослуулан ашигладаг. Эдгээр нь POP, SMTP, NNTP бүрэлдэхүүн хэсгүүд байж болно. Анги нь MIME шифрлэлт болон тайлах, олон байт тэмдэгтүүд болон ISO кодчилолыг дэмждэг.

TIdNetworkCalculator

Програмыг бүтээхэд ашиглаж болох цөөхөн Indy бүрэлдэхүүн хэсгүүдийн нэг. Сүлжээний тооцоолуурыг сүлжээний маск, дэд сүлжээ, сүлжээний анги гэх мэт IP хаягууд дээр тооцоолол хийхэд ашиглаж болно.

TIdThreadMgrDefault

Бүрэлдэхүүн хэсэг нь анхдагчаар хоёрдогч процессуудыг хянах боломжийг олгодог. Процессын удирдлагыг дэмждэг Indy бүрэлдэхүүн хэсэг нь тодорхойлогдсон TIdThreadManager ангийн жишээгүй үед үүсгэгдэнэ. Бүрэлдэхүүн хэсэг нь хоёрдогч процессыг удирдах үндсэн чадамжийг өгдөг: эрэлт хэрэгцээний дагуу тэдгээрийг үүсгэх, устгах.

TIdThreadMgrPool

TIdThreadMgrDefault-аас илүү дэвшилтэт процессын удирдлагын бүрэлдэхүүн хэсэг, учир нь энэ нь процессуудыг эрэлт хэрэгцээгээр үүсгэх эсвэл устгахын оронд нэгтгэдэг.

TIdVCard

VCard нь нэрийн хуудасны цахим эквивалент бөгөөд эзэмшигчийн хувийн мэдээлэл болон график өгөгдлийг агуулж болно.

TIdIMFDecoder

Интернет мессежийг тайлахад зориулагдсан. Энэ нь бусад кодлогчийн бүрэлдэхүүн хэсгүүдийн нэгэн адил TIdCoder ангийн удам юм. TIdCoder анги нь 1982 оны 8-р сард санал болгосон ARPA интернет текст мессежийн форматын стандарт RFS-822 болон 1987 оны 12-р сард санал болгосон USENET мессежийн RFC 1036 стандартын дагуу код тайлдаг.

Бүрэлдэхүүн хэсэг нь TIdCoder ангиллыг өргөтгөж, RFS-822 форматыг толгойн контекстээр нь илрүүлэх боломжийг олгож, хүлээн авах үед шифрлэх горим, MIME шифрлэлт болон шифрийг тайлах боломжийг олгодог. TIdIMFDecoder бүрэлдэхүүнийг TIdMessageClient ангид хүлээн авсан болон дамжуулсан мессежийг тайлахад ашигладаг.

TIdQuotedPrintableEncoder

QuotedPrintableEncoder нь заасан форматаар текстийн шифрийг тайлах боломжийг танд олгоно. Тодорхой кодчилол бүхий бие даасан бүрэлдэхүүн хэсэг болж, шинэ кодчилол агуулсан мессежийг дамжуулах боломжтой.

TIdBase64 кодлогч

Хэвлэх боломжгүй тэмдэгтүүдийг дамжуулах боломжтой өөр шифрлэлтийн алгоритмыг хэрэгжүүлдэг.

TIdUUEнкодер

Шифрлэлтийн анхны алгоритмуудын нэг болох UU кодчилолыг хэрэгжүүлдэг. Заримдаа мэдээний үйлчилгээнд нийтлэл илгээхэд ашигладаг.

TIdXXEncoder

Энэ шифрлэлтийн аргыг хэзээ ч ашиглах боломжгүй. Үндсэндээ энэ нь ижил UU кодчилол боловч өөр шифрлэлтийн хүснэгттэй.

TIdCoderMD2

Өөр өөр төрлийн MD (Message Digest) шифрлэлтийн алгоритм бүхий бүрэлдэхүүн хэсгүүд. Тэд бүгд холилдоход суурилсан, нэг чиглэлтэй бөгөөд шифрийг тайлах алгоритмгүй.

Протоколын клиент болон серверийн бүрэлдэхүүн хэсгүүдийг үндсэн програмууд (ClientSocket, ServerSocket) болон Интернет болон Fastnet палитраас бусад бүрэлдэхүүн хэсгүүдийн хамт эсвэл оронд нь сервер болон үйлчлүүлэгчийн интернет програмуудыг хөгжүүлэхэд ашиглаж болно. Indy бүрэлдэхүүн хэсгүүд нь WebBroker-ийн архитектурыг ашигладаггүй бөгөөд Интернет протоколууд болон үйлчилгээнүүдийн доод түвшний дэмжлэгийг шууд эх кодод нь хэрэгжүүлдэг ( эх кодуудхавсаргасан байна).

TIdConnectionInterceptOpenSSL болон TIdServerInterceptOpenSSL

Хоёр програмын хоорондох харилцааны нууцлал, найдвартай байдлыг хангадаг SSL протокол - Secure Sockets Layer нь хоёр давхаргатай. Олон давхаргат тээврийн протоколын доод түвшинд (TCP гэх мэт) SSL нь бичлэг хийх протокол бөгөөд янз бүрийн дээд түвшний протоколуудыг багтаахад ашигладаг. SSL-ийн давуу тал нь энэ нь бие даасан хэрэглээний протокол боловч SSL дээр дээд түвшний протоколыг ашиглаж болно.

SSL нь харилцааны аюулгүй байдлыг хангадаг бөгөөд энэ нь гурван үндсэн үүрэгтэй: нууц холболтыг хангах; ашиглан шифрлэх нийтийн түлхүүр(хүлээн авагчийн жинхэнэ эсэхийг баталгаажуулахад ашигладаг); өгөгдөл дамжуулах найдвартай байдлыг дэмжих.

  • Тэгш хэмт криптографийг өгөгдлийг шифрлэхэд ашигладаг (жишээлбэл, DES, RC4 гэх мэт).
  • Цахим гарын үсэгтэгш хэмт бус нийтийн түлхүүрийн шифрлэлт (жишээ нь, RSA, DSS гэх мэт) ашиглан хангагдсан.
  • Харилцааны найдвартай байдал, мессежийн тээвэрлэлт нь MAC тооцоолол ашиглан MAC залруулах кодууд, аюулгүй хэш функцууд (жишээ нь, SHA, MD5 гэх мэт) дамжуулан мессежийн бүрэн бүтэн байдлыг шалгах зэрэг орно.

HTTP болон серверийн баталгаажуулалттай хослуулан SSL нь хангадаг шаардлагатай функцуудшифрлэлт, цаашид тогтоосон холболтыг хадгалах, вэб серверийн жинхэнэ эсэхийг давхар шалгах гэх мэт. SSL нь зөвхөн өгөгдөл дамжуулах явцад харилцаа холбоог хамгаалж, бусад хамгаалалтын механизмыг орлохгүй гэдгийг ойлгох нь чухал юм.

TIdConnectionInterceptOpenSSL болон TIdServerInterceptOpenSSL бүрэлдэхүүн хэсгүүд нь SSL протоколыг ашиглан клиент болон сервер талын холболтыг хангадаг. TIdConnectionInterceptOpenSSL болон TIdServerInterceptOpenSSL бүрэлдэхүүн хэсгүүд нь зөвхөн Delphi 6 дээр байдаг боловч Kylix дээр байдаггүй гэдгийг тэмдэглэх нь зүйтэй. Энэ нь Windows-ийн хэрэгжилтийн хувьд үйлдлийн системийн функц дээр суурилдаг протоколын нарийн төвөгтэй байдалтай холбоотой юм.

Indy бүрэлдэхүүн хэсгүүдийг ашиглах жишээг /Delphi6/Demos/Indy лавлахаас олж болно. Нийтдээ 8.0 хувилбар дахь Indy номын сан нь 69 бүрэлдэхүүн хэсэгтэй. 9.0 хувилбарт заасан номын сан нь 86 бүрэлдэхүүн хэсгийг агуулна гэж заасан. Бүх бүрэлдэхүүн хэсгүүд нь нэгдсэн бөгөөд Delphi 6 болон Kylix аль алинд нь багтсан бөгөөд энэ нь тэдгээрийг платформ хоорондын програмуудыг хөгжүүлэхэд ашиглах боломжийг олгодог. Бүх Indy бүрэлдэхүүн хэсгүүд нь олон урсгалыг дэмждэг.

Indy бүрэлдэхүүн хэсгүүд нь хүснэгтэд тодорхой үзүүлсэн шиг Интернет болон Fastnet бүрэлдэхүүн хэсгүүдээс олдсон бараг бүх функцийг хэрэгжүүлдэг.

Хурдан ба бүрэлдэхүүн хэсгүүд Indy бүрэлдэхүүн хэсгүүд Бүрэлдэхүүн хэсгүүдийн зорилго
1 TserverSocket, TClientSocket TIdTCPserverSocket, TIdTCPClientSocket TCP/IP протоколыг ашиглан хоёр компьютер (үйлчлүүлэгч ба сервер) хоорондын харилцан үйлчлэл
2 TNMDayTime TIdDayTime, TIdDayTimeServer Одоогийн цагийг серверээс асуу
3 TNMEcho TIdEcho, TIdEchoServer Хариу сервертэй харилцахад ашигладаг
4 TNMFinger TIdFinger, TIdFingerServer Интернэт хайлтын серверээс хэрэглэгчийн талаарх мэдээллийг авахад ашигладаг
5 TNMFTP TIdFTP, TIdTrivialFTP, TIdTrivialFTPServer FTP протоколыг ашиглан файл дамжуулалтыг хангана
6 TNMHTTP TIdHTTP, TIdHTTPSсервер Өгөгдөл солилцохын тулд HTTP протоколыг ашиглана уу
7 TNMMsgServ, TNMMsg Үйлчлүүлэгчээс сервер рүү энгийн текст мессеж дамжуулахад ашигладаг
8 TNMNNTP TIdNNTP, TIdNNTPSсервер Мэдээллийн сервертэй өгөгдөл солилцохыг дэмждэг
9 TNMPOP3 TIdPOP3 POP3 протоколыг ашиглан мэйл серверээс имэйл хүлээн авахад ашигладаг
10 TNMSMTP TIdSMTP Интернэт мэйл серверээр имэйл илгээхэд ашигладаг
11 TNMStrm, TNMStrmServ TCP/IP протоколыг ашиглан урсгал руу бичигдсэн хоёртын өгөгдлийг дамжуулдаг
12 TNMUDP TIdUDP, TIdUDPSсервер UDP протоколыг ашиглан өгөгдөл дамжуулах
13 TpowerSock, TNMGeneralServer Өөрийн үйлчлүүлэгч (Powersock) болон серверүүд (NMGeneralServer) бичих үндэс болсон бүрэлдэхүүн хэсгүүдийн бүрээстэй ангиуд.
14 TNMUUПроцессор TIdUUencoder, TIdUUDecoder Дахин кодчилол хийх хоёртын файлууд MIME эсвэл UUENCODE формат руу
15 TNMURL Мөрүүдийг хөрвүүлдэг HTML форматмөн урвуу дахин кодчилол хийдэг

Үл хамаарах зүйл нь TNMMsgServ, TNMMsg, TNMStrm, TNMStrmServ, TpowerSock, TNMGeneralServer, TNMURL зэрэг хуучирсан протоколуудыг хэрэгжүүлдэг эсвэл өөр ангиудын том бүлэгт хэрэгжсэн функцтэй ангиуд юм.

Гэсэн хэдий ч өмнөх хувилбарууд болох Интернэт болон Fastnet бүрэлдэхүүн хэсгүүдээс ялгаатай нь Indy нь өгөгдлийг хөрвүүлэх, шифрлэх илүү баялаг серверийн бүрэлдэхүүн хэсгүүд, бүрдэл хэсгүүд, түүнчлэн баталгаажуулалтын дэмжлэг (Indy Misc палитр) агуулдаг. Дээрх хүснэгтээс харахад үндсэн протокол, үйлчилгээг зөвхөн үйлчлүүлэгч төдийгүй серверийн бүрэлдэхүүн хэсгүүдээр хангадаг. Эдгээр нь цагийн үйлчилгээ, хариу өгөх үйлчилгээ, хэрэглэгчийн мэдээллийг олж авах, мөн HTTP, NNTP, UDP протоколууд, тэр ч байтугай FTP-ийн хамгийн энгийн хувилбарууд юм.

Indy бүрэлдэхүүн хэсгүүдийг ашиглах зарим жишээ

Delphi-д агуулагдах Indy бүрэлдэхүүн хэсгүүдэд IP хаяг нь Host шинж чанарт тодорхойлогддог бөгөөд ихэвчлэн зөвхөн клиент програмуудад байдаг. Серверт байршуулсан бүрэлдэхүүн хэсгүүд нь харгалзах портын санал асуулгыг эхлүүлэх эсвэл зогсоох боломжтой аргуудтай байдаг - жишээлбэл, IdTCPServer бүрэлдэхүүн хэсгийн Active шинж чанарыг өөрчлөх нь харгалзах портын санал асуулгыг эхлүүлж эсвэл зогсоодог. Үйлчлүүлэгч болон серверийн хооронд холболт үүссэний дараа өгөгдөл дамжуулах ажлыг эхлүүлж болно.

Indy бүрэлдэхүүн хэсгүүд нь өгөгдөлтэй ажиллахдаа аюулгүй байдал, найдвартай байдалд ихээхэн ач холбогдол өгдөг. Жишээлбэл, IdTCPClient бүрэлдэхүүн хэсэг нь Connect болон Disconnect аргуудтай. Үйлчлүүлэгч талаас доорх код шиг програмчлалын техникийг ашиглан:

TCPClient-ийн тусламжтайгаар Connect-ыг эхлүүлнэ үү; lstMain.Items.Add(ReadLn); эцэст нь салгах; Төгсгөл; Төгсгөл;

мөн сервер талаас TIdPeerThread ангийн AThread жишээнд параметр болгон дамжуулсан Холболтын шинж чанарыг ашиглан:

AThread.Connection-ийн тусламжтайгаар WriteLn ("Үндсэн Indy серверийн серверээс мэндчилж байна."); Салгах; Төгсгөл;

та холболтын хэвийн гүйцэтгэл эсвэл алдааг зөв зохицуулсан гэдэгт найдаж болно.

Харгалзах ангиудын ReadLn болон WriteLn аргуудыг анхаарна уу - тэдгээр нь стандарт Паскал I/O хэллэгтэй төстэй. Энэ нь системийн ихэнх үйлдлүүдийг харгалзах файлуудыг уншиж бичих замаар гүйцэтгэдэг UNIX програмчлалын техникт хүндэтгэл үзүүлж байна.

Fastnet бүрэлдэхүүн хэсгүүдийн нэгэн адил Indy бүрэлдэхүүн хэсгүүдэд үйл явдлын менежментийг хангахад ашиглаж болох үйл явдлууд байдаг. Жишээлбэл, та үйлчлүүлэгчтэй холбогдох үед маягт дээр гарч ирэх мессежийг зохион байгуулж болно:

Процедур TForm1.IdECHOServer1Connect(AThread: TIdPeerThread); start lblStatus.caption:= "[ Үйлчлүүлэгч үйлчлүүлэгч ]"; Төгсгөл;

Indy нь энэ номын санд өвөрмөц байдаг клиент болон серверийн хэсгүүдтэй протоколуудыг хэрэгжүүлдэг бүрэлдэхүүн хэсгүүдээр хангадаг. TIdGopherServer болон TIdGopher бүрэлдэхүүн хэсгүүд нь үйлчлүүлэгч талын GetExtendedMenu, GetFile, GetMenu, GetTextFile аргууд болон сервер талд ReturnGopherItem, SendDirectoryEntry-ийн ачаар файлуудыг үзэхэд тусалдаг. янз бүрийн төрөл, нуугдмал гэж тэмдэглэсэн, мөн дээр байгаа лавлах зэрэг алсын компьютер(dir *.* командын хийдэгтэй төстэй үйлдлийн систем MS-DOS).

IdSMTP болон IdMessage бүрэлдэхүүн хэсгүүдийг ашигласнаар та SMTP протоколыг ашиглан шуудан илгээх боломжтой өөрийн вэб программыг хялбархан үүсгэж болно.

Энэ тохиолдолд IdMessage анги (Indy Misc хуудасны 23 бүрэлдэхүүн хэсгийн нэг) нь түүний нэрнээс үүдэлтэй мессежийг үүсгэх үүрэгтэй бөгөөд IdSMTP нь шуудангийн сервертэй холболтыг зохион байгуулах үүрэгтэй.

Indy-д хэрэглэгдэж буй технологи нь унших, бичих түгжих үйлдлийг ашигладаг. Indy-д ашигласан аливаа Connect үйлдэл нь холболт дуусахыг хүлээнэ. Indy үйлчлүүлэгчийн бүрэлдэхүүн хэсгүүдтэй ажиллахдаа та дараах зүйлсийг хийх хэрэгтэй:

  • сервертэй холбогдох хүсэлт гаргах;
  • серверт унших, бичих хүсэлт гаргах (серверийн төрлөөс хамааран алхам нь нэг удаа хийгддэг эсвэл олон удаа давтагддаг);
  • сервертэй холболтыг зогсоож, салга.

Indy бүрэлдэхүүн хэсгүүд нь хэт өндөр түвшний хийсвэрлэлийг хангах зорилготой юм. TCP/IP стекийн нарийн ширийн зүйлс, нарийн ширийн зүйлс нь програмистаас нуугдаж байгаа бөгөөд ингэснээр тэр ажилдаа анхаарлаа төвлөрүүлж чадна.

Дараах жижиг жишээ нь ердийн үйлчлүүлэгчийн шошны сессийг харуулж байна:

IndyClient-ээр эхлээд Host:= "zip.pbe.com"; // Дуудлага хийх хост Порт:= 6000; // Connect дээрх сервер рүү залгах порт; оролдоно уу // Таны код энд байна эцэст нь Disconnect; Төгсгөл; Төгсгөл;

Жишээн дээр сервертэй холболт тогтоогдоогүй байсан ч try-finally хэллэгийг ашигласнаар холболт эвтэйхэн тасарна.

Indy-ийн серверийн бүрэлдэхүүн хэсгүүд нь таны хэрэгцээ болон ашиглаж буй протоколоос хамааран ашиглаж болох олон төрлийн серверийн загваруудыг тодорхойлдог.

TIdTCPServer нь хамгийн түгээмэл хэрэглэгддэг серверийн бүрэлдэхүүн хэсэг бөгөөд програмын үндсэн процессоос үл хамааран хоёрдогч процесс үүсгэдэг. Үүсгэсэн процесс нь ирж буй хүсэлтийг хүлээж байна боломжит үйлчлүүлэгчид. Хүсэлтэд нь хариу өгсөн үйлчлүүлэгч бүрийн хувьд бие даасан хоёрдогч процессыг бий болгодог. Засвар үйлчилгээний явцад тохиолддог үйл явдлууд нь холбогдох үйл явцын нөхцөлтэй холбоотой байдаг.

Өөрөөр хэлбэл, үйлчлүүлэгчийн холболт бүрийн хувьд TIdTCPServer анги нь тухайн thread-ийн OnExecute үйл явдлын зохицуулагчийг дуудаж өвөрмөц хоёрдогч урсгалыг ашигладаг. OnExecute аргын албан ёсны параметр нь үүсгэсэн хэлхээнд харгалзах Athread ангийн жишээний лавлагаа юм. Энэ ангийн Connection шинж чанар нь TIdTCPConnection классын лавлагаа бөгөөд үүний жишээ нь үйлчлүүлэгчийн хүсэлтийг боловсруулахад зориулагдсан байдаг. TIdTCPConnection нь холболтоор унших, бичих, мөн харилцааны сесс үүсгэх, дуусгахыг дэмждэг.

UDP протокол нь эхлээд сервертэй холболт үүсгэхгүйгээр ажилладаг (илгээсэн пакет бүр нь бие даасан өгөгдлийн багц бөгөөд илүү том сесс эсвэл холболтын хэсэг биш). TIdTCPServer нь холболт бүрд тусдаа хэлхээ үүсгэдэг бол TIdUDPServer нь UDP протоколын бүх хүсэлтийг хариуцдаг үндсэн урсгал эсвэл нэг хоёрдогч урсгалыг ашигладаг. TIdUDPServer идэвхтэй байх үед ирж буй UDP пакетуудыг сонсох урсгал үүсдэг. Хүлээн авсан пакет бүрийн хувьд OnUDPRead үйл явдал ThreadedEvent шинж чанарын утгаас хамааран үндсэн урсгал дээр эсвэл сонсох хэлхээний контекст дээр үүсдэг. ThreadedEvent нь худал гэж үнэлэгдэх үед уг үйл явдал үндсэн урсгал дээр, эс бөгөөс сонсох хэлхээнд тохиолддог. Үйл явдлыг боловсруулж байх үед серверийн бусад үйлдлүүд хаагдсан байна. Тиймээс OnUDPRead процедурыг аль болох хурдан ажиллуулах нь чухал юм.

Хэрэв та одоо байгаа протоколыг ашиглан одоо байгаа серверт шинэ клиент програм үүсгэх шаардлагатай бол таны ажил зөвхөн клиент програмыг хөгжүүлж, дибаг хийх явдал юм. Гэсэн хэдий ч, та үйлчлүүлэгч болон аль алиныг нь хөгжүүлэх ёстой үед серверийн програмОдоо байгаа эсвэл шинэ протокол ашиглаж байгаа эсэхээс үл хамааран бид "тахиа, өндөг" гэсэн сонгодог асуудалтай тулгардаг. Програмчлалыг хаанаас эхлэх вэ - үйлчлүүлэгчээс эсвэл серверээс?

Мэдээжийн хэрэг, үйлчлүүлэгч болон сервер хоёулаа эцэст нь үүсэх ёстой. Олон программуудын хувьд, ялангуяа текстэд суурилсан протокол (HTTP гэх мэт) ашигладаг программуудын хувьд серверийг зохион бүтээх замаар програмыг үүсгэж эхлэх нь илүү хялбар байдаг. Мөн дибаг хийхэд тохиромжтой үйлчлүүлэгч аль хэдийн байдаг. Энэ нь Windows болон UNIX дээр ашиглах боломжтой Telnet консол програм юм.

Хэрэв та консолыг бичвэл telnet тушаал 127.0.0.1 80 локал компьютерийн IP хаяг, вэб серверүүд анхдагчаар ашигладаг портын дугаар 80, дараа нь програм Зураг дээр үзүүлсэн текстийн дагуу хариу өгөх болно. 6, Windows 2000 үйлдлийн систем болон IIS 5.0 тохиолдолд.

Indy бүрэлдэхүүн хэсгүүдийг ашиглан хамгийн энгийн сервер үүсгэхийн тулд танд дараах зүйлс хэрэгтэй:

Хэрэв та холболт тасарсан үед үйлчлүүлэгчдээ зөв мэдээлэхээс гадна гарсан алдааны талаар мэдээлэл өгөх сервер зохион бүтээх шаардлагатай бол try-finally гэхийн оронд try-except хэллэгийг ашиглана уу. дараах жишээнд харуулав.

Процедур TDataModule1.IdTCPServer1Execute(AThread: IdPeerThread); var s: мөр; AThread гэж эхэлнэ. Холболтыг оролдоод үзээрэй s:= ReadLn; // Энд серверийн даалгаврыг гүйцэтгэнэ // хэрэв ямар нэгэн онцгой тохиолдол гараагүй бол // серверийн хариу WriteLn(s)-ийг бичнэ үү; e-с бусад тохиолдолд: Exception do begin WriteLn(e.Message); end; //on end; //оролдохоос бусад нь эцсийн байдлаар Disconnect; end; end;

Энэхүү жижиг жишээ нь энгийн текст сервер үүсгэх алхмуудыг, түүнчлэн түүнийг хэрхэн дибаг хийхийг харуулж байна.

Дээр дурдсан сервер нь орчин үеийн тархсан тооцооллын зохион байгуулалтын ердийн жишээ юм.

Олон шатлалт програм үүсгэх онцлог

Сүүлийн үед үйлчлүүлэгчдийн хүсэлтийг хангахын тулд олон серверүүд улам бүр ашиглагдаж байна. Энэ төрлийн сервер нь үйлчлүүлэгчийн хүсэлтийг хүлээн авч, цаашид боловсруулахад хэсэгчлэн бэлтгэсний дараа өөр сервертэй холбогдож, өөрчилсөн хүсэлт эсвэл хүсэлтийг илгээдэг. Хоёрдахь түвшний сервер нь эргээд бусад серверүүдтэй харилцах боломжтой. Тиймээс бид олон түвшний серверийн архитектурын тухай ярьж болно.

Дараа нь бид өгөгдлийн сангаас өгөгдлийг буцаах зорилготой өгөгдөлд нэвтрэх серверийг бий болгоно. Гэхдээ энэ сервер өгөгдлийн сангийн файлуудыг шууд уншиж, бичихгүй. Харин үйлчлүүлэгчид шаардлагатай өгөгдлийг хайж олохын тулд өгөгдлийн сангийн сервертэй холбогддог.

Тиймээс бид гурван шатлалт архитектур бүхий програм боловсруулж эхэлнэ. Indy бүрэлдэхүүн хэсгүүдийг ашиглан мэдээллийн баазын сервер үүсгэхийн тулд танд дараах зүйлс хэрэгтэй:

  1. Шинэ төсөл үүсгэх.
  2. дээр байрлуул үндсэн хэлбэр Indy Servers палитраас TIdTCPServer бүрэлдэхүүн хэсгийн төслийн жишээ.
  3. TIdTCPServer1 ангийн жишээний DefaultPort шинж чанарыг 6001 болгож тохируулна уу (өөр өөр программууд дээр портын дугаарыг давхардуулахгүйн тулд том утгууд өгөхийг зөвлөж байна), Active шинж чанарыг үнэн гэж тохируулна уу.
  4. File |-г сонгон төсөлд шинэ модуль нэмнэ үү Шинэ | Мэдээллийн модуль болон бүрэлдэхүүн хэсгүүдийн палитр дээрх dbExpress табаас SQLConnection болон SQLDataSet бүрэлдэхүүн хэсгүүдийн жишээг байрлуул.
  5. SQLConnection ангийн ConnectionName шинж чанарыг IBLocal, LoginPrompt-г худал болгож тохируулна уу. Хэрэв та ажилтан.gdb мэдээллийн сан дээр IBLocal-г тохируулаагүй бол эхлээд энэ процедурыг дуусга.

Сайн уу!

Дараагийн вэб төслийг боловсруулахдаа Delphi-д POST аргыг ашиглан сервер рүү өгөгдөл дамжуулах клиент програм хангамжийг хэрэгжүүлэх даалгавар гарч ирэв. Програм нь текстийг дамжуулж, вэб сервер рүү файл байршуулах ёстой.

Сервер талын хэлийг ашиглан ийм өгөгдөл илгээх ажиллагааг хэрэгжүүлэх Вэб хөгжүүлэлт(Жишээ нь, PHP) нь маш энгийн боловч хэрэв та сервертэй харьцдаг програмд ​​суурилсан, олон хэрэглэгчийн программ бичих шаардлагатай бол энэ нь арай илүү төвөгтэй юм. Мэдээллийн сан болон FTP-ээр Delphi-ээс сервер рүү шууд холбогдох арга шаардлагагүй болсон энэ нь аюулгүй биш, найдвартай биш (нууц үг солих, холболтын өгөгдөл гэх мэт) бөгөөд нэмэлт зүйл үүсгэдэг. үйлчлүүлэгч тал дээр програм хангамжийн нийцтэй байдлын асуудал. Асуудлыг шийдэхийн тулд би ирж буй мэдээллийг боловсруулах скриптүүд (серверийн хэсэг) PHP дээр бичихээр шийдсэн POST хүсэлтмөн үр дүнг үйлчлүүлэгч рүү буцаана (Delphi програм). Энэ аргын давуу тал нь бүх холболтууд болон өгөгдөл боловсруулах нь сервер дээр явагддаг бөгөөд энэ нь шууд "холболт"-оос хамаагүй аюулгүй юм.

Намайг Google-ээр хайж эхлэхэд олон тархай бутархай мэдээлэл, ихэнхдээ форум дээр байсан ч бүгд хэсэгчилсэн байсан. Indy-г ашиглах нь тодорхой байсан, тухайлбал, POST аргыг хэрэгжүүлсэн IdHTTP бүрэлдэхүүн хэсэг. Үнэндээ бүх зүйл энгийн, энэ арганөөцийн URL болон DataStream (өгөгдлийн урсгал) гэсэн хоёр параметрийг авч, үр дүнг текст хэлбэрээр буцаана (энэ нь хуудасны HTML код байж болно). Хамгийн гол нь DataStream (дамжуулсан өгөгдлийн урсгал) -ийг зөв бүрдүүлэх явдал байсан боловч энэ явцад Оросын кодчилол (хэрэв энэ нь сайн биш байсан бол) нэмэлт бэрхшээлүүд гарч ирэв. Хэдэн цагийн турш интернетээр тэнүүчлэх зугаа цэнгэл эндээс эхэлсэн юм. Ерөнхийдөө хангалттай чалчаа, програм хангамжийн дадлага, хэрэгжилт рүү шилжье.

Тиймээс програм нь энгийн. Тэр POST аргыг ашиглан сервер рүү өгөгдөл илгээх ёстой, өгөгдөл нь " Гарчиг "(мөр)," Тодорхойлолт » ( олон мөрт текст) Мөн график файл(jpg, png, gif-хоёртын өгөгдөл). Сервер нь энэ өгөгдлийг хүлээн авч, боловсруулж, график файлыг сервер дээр хадгалж, хариу өгөх ёстой. Үүний хариуд бид Delphi-г програм руу буцаах болно, ижил текстийг зөвхөн нэмсэн шошготой, татаж авсан файлын холбоостой. Юу ч биш.

Серверийн хэсгийн хэрэгжилтээс эхэлцгээе (сайтын API-тай төстэй). Аль ч нээ текст засварлагч(тэмдэглэлийн дэвтэр) хийгээд түүнд дараах кодыг бичнэ үү.

"; ) else ( "Гарчиг: Алга болсон" гэсэн цуурай."
"; ) //Хэрэв (!empty($_POST["content"]))( echo "Content: ".$_POST["content"]" бол "агуулгын" талбарын өгөгдөл байгаа эсэхийг шалгана уу."
"; ) else ( "Агуулга: Алга болсон" гэсэн цуурай."
"; ) //Хэрэв (!empty($_FILES["file"])) ( $finfo = pathinfo($_FILES["file"]["нэр" "файл" хавсаргасан файл байгаа эсэхийг шалгах ]); / /файлын тухай мэдээлэл авах (нэр, өргөтгөл гэх мэт) //Зөвшөөрөгдсөн төрлүүдийн жагсаалтаас файлын төрлийг шалгана уу (IMPROVISATION:)) if (stripos("jpgpnggif",$finfo["өргөтгөл"]) )==0)( echo ">>>>>>>Файлын төрөл буруу байна<<<<<<<<"; exit; //Если не допустим тип, полностью останавливаем скрипт } $fname = "files/" . "testimgfile." . $finfo["extension"]; //формируем путь и новое имя файла move_uploaded_file($_FILES["file"]["tmp_name"],$fname);//сохраняем временный файл "tmp_name" в файл $fname echo "http://".$_SERVER["HTTP_HOST"]."/".$fname; //возвращаем полный путь к файлу } ?>

тэмдэглэл! Хадгалахдаа (тэмдэглэлийн дэвтэрээр дамжуулан) "UTF-8" кодчилолыг зааж өгөх ёстой, эс тэгвээс кирилл үсгийг харуулахад асуудал гарна!

Скрипт нь дэлгэрэнгүй тайлбар өгөхийг оролдсон. Энэ скриптийг вэб сервертээ хуулна уу, хэрэв танд байхгүй бол миний скриптийг тестэнд ашиглаж болно, энэ нь дараах хаягаар байрладаг: http://api..php

Зохион байгуулалт нь дараах бүрэлдэхүүн хэсгүүдийг ашигладаг: Шошго, Товч (2 ширхэг), Засварлах (2 ширхэг), Санамж (2 ширхэг), CheckBox, OpenDialog, IdHTTP. Дараах бүрэлдэхүүн хэсгүүдийн нэрийг өгнө үү (хөрөнгө " Нэр”):

  1. Засварлах (гарчиг) - Нэр=гарчиг;
  2. Засварлах (файлын зам) Нэр = imgfile;
  3. Санамж(Агуулга)Нэр = агуулга;
  4. Санамж (үр дүн) - Нэр = хариулт;
  5. Товчлуур (…) - Нэр = chkfile;
  6. Товч (POST) - Нэр = Post Гэхдээ;
  7. OpenDialog (Файл сонгох харилцах цонх) - Нэр = PictDialog;

IdHTTP1 болон CheckBox1-ийг өөрчлөхгүй орхиё (ядарсан! :)))).

Санамсаргүй байхын тулд " засварлах» Засварлах зам( imgfile), түүний ReadOnly шинж чанарыг True болгож тохируулна уу. Үүний нэгэн адил, at imgfileТэгээд chk файл Enabled шинж чанарыг худал болгож тохируулна уу. Бид тэдгээрийг CheckBox ашиглан идэвхжүүлнэ, i.e. Бид зураг оруулах эсэхээ сонгох боломжийг олгоно.

OpenDialog-д зориулсан( PictDialog) та шүүлтүүрийг (Шүүлтүүрийн шинж чанар) дараах байдлаар тохируулах хэрэгтэй:

Бодит харааны бэлтгэл дууслаа! Кодлоод эхэлцгээе!

Төсөлд бид Indy-д багтсан төрлийг ашиглан мэдээллийн урсгалыг үүсгэх болно - TidMultiPartFormDataStream.Хэдийгээр бид хамтран ажиллах TStream ашиглан хэрэгжүүлэх хувилбаруудтай таарсан TidMultiPartFormDataStream -Илүү амархан!

Энэ төрлийг манай төсөлд ашиглах боломжтой болгохын тулд бид Uses-д дараах номын санг нэмэх шаардлагатай. IdMultipartFormData.

CheckBox1-ийн хувьд OnClick үйл явдлыг үүсгээд (объект дээр хулганыг давхар товшиж) энэ үйл явдалд дараах кодыг нэмнэ үү.

Процедур TForm1.CheckBox1Click(Илгээгч: TObject); эхлэх //файлын замын элементүүд болон харилцах товчлууруудыг идэвхтэй эсвэл идэвхгүй болгох imgfile.Enabled:=CheckBox1.Checked; chkfile.Enabled:=CheckBox1.Checked; Төгсгөл;

Энд бид объектуудыг идэвхжүүлдэг imgfile Тэгээдchk файлшалгах тэмдэг байгаа эсэхээс хамаарна (хэрэв тэмдэглэгээг тэмдэглэвэл объектууд идэвхтэй болно).

Одоо зургийн сонголтыг зохион байгуулъя. Үүнийг хийхийн тулд товчлуур дээр OnClick үйл явдлыг үүсгэ chk файл(мөн объект дээр давхар товшиж) дараахыг бичнэ үү.

Процедур TForm1.chkfileClick(Илгээгч: TObject); эхлэх //харилцах цонхыг нээгээд imgfile(TEdit) дотор файлын бүрэн замыг оруулна уу, хэрэв PictDialog.Execute дараа нь imgfile.Text:= PictDialog.FileName; Төгсгөл;

Энэ үйл явдал нь зураг сонгох харилцах цонхыг эхлүүлэх бөгөөд хэрэв хэрэглэгч " Нээлттэй", дараа нь энэ файлын замыг нэмэх болно imgfile.

Одоо бид эцсийн "POST" товчлуур дээр ирлээ. Энэ товчлуур дээр OnClick үйл явдал үүсгээд дараах кодыг нэмнэ үү:

Процедур TForm1.PostButClick(Илгээгч: TObject); var dataPost:TIdMultiPartFormDataStream; start dataPost:=TIdMultiPartFormDataStream.Create; dataPost.AddFormField("гарчиг", гарчиг.Текст,"utf-8").ContentTransfer:= "8бит"; dataPost.AddFormField("content",content.Text,"utf-8").ContentTransfer:= "8бит"; хэрэв CheckBox1.Checked ба (trim(imgfile.Text)="") дараа нь //файл сонгогдсон эсэхийг шалгах ShowMessage("Та график файл сонгох ёстой!"); гарах; Төгсгөл; хэрэв CheckBox1.Checked дараа нь dataPost.AddFile("файл", imgfile.Text,""); //файлын хариулт бүхий талбар нэмнэ.Текст:= StringReplace(idHTTP1.Post("http://api..php",dataPost),"
",#13#10,); datapost.Free; end;

Тиймээс, дарааллаар нь (сэтгэгдэл байгаа ч гэсэн):

Мэдээллийн шуудан - төрлийн объект TIdMultiPartFormDataStream. Төрөл бүрийн талбаруудаас бүрдэх POST хүсэлтийн бүтцийг бий болгох боломжийг танд олгоно.

dataPost . AddFormField (" гарчиг ", гарчиг . Текст ," utf -8 "). Агуулга дамжуулах := " 8 жаахан "; – DataPost-д “title” нэртэй талбарыг нэмж, “title.Text”-ийн утга, дамжуулсан өгөгдлийн кодчилолыг “utf-8” болгож тохируулна (параметр нь сонголттой, гэхдээ тодорхой заагаагүй, кирилл үсгээр дамжуулагдана. асуултын тэмдэг "?") ба маш чухал арга "Агуулга дамжуулах". Энэ аргагүйгээр өгөгдлийг сервер рүү илгээдэг " абракадабра" Илгээж буй талбарын нэр (“гарчиг”) нь скриптэд заасан нэртэй тохирч байх ёстойг анхаарна уу: $_POST["гарчиг"].

Өгөгдлийг "агуулгын" талбарт ижил төстэй байдлаар шилжүүлдэг.

dataPost . Файл нэмэх (" файл ", imgfile . Текст ,"") – энэ мөрийн тусламжтайгаар бид файлын өгөгдөл бүхий урсгал үүсгэдэг.

Энэ бол өгөгдөл үүсгэгдсэн бөгөөд үүнийг сервер дээрх скрипт рүү шилжүүлж, хариу хүлээн авах явдал юм.

хариулт.Текст:= StringReplace(idHTTP1.Post("http://api..php",dataPost),"
",#13#10,);

учир нь TMemo мөр таслах шошгыг ойлгохгүй байна "
", бид " " функцийг ашиглан "#13#10" ойлгомжтой мөрийн завсараар солих болно.

Бүх зүйл дууссаны дараа DataPost объектоос санах ойг дараах мөртэй арилгана.

datapost.Free;

Хэдийгээр бидний жишээнд энэ нь процедурын төгсгөлд автоматаар хийгдэх боловч ...

Дэлгэц дээрх програмын бодит үр дүн:

Тиймээс бид сервер рүү хүссэн хэмжээгээр өгөгдөл эсвэл файл илгээж, энэ өгөгдлийг сервер дээр боловсруулж, скриптийн үр дүнг програмд ​​буцааж мэдээлэх боломжтой. Энэ нь зүгээр л 0 эсвэл 1 байж болох бөгөөд энэ нь програмыг цаашид хариу үйлдэл үзүүлэхийг дохио болно.

Бүгд. Бүгдэд нь амжилт хүсье. Энэ мэдээлэл танд хэрэгтэй байсан бөгөөд танд хэрэг болно гэж найдаж байна.

Та дууссан жишээ болон скриптийг татаж авах боломжтой.

Бүрэн модулийн код:

Шуудангийн нэгж; интерфэйс нь Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdBaseComponent, IdComponent, IdTCdTCConnection, IdTCPConliction ашигладаг. IdHTTP, IdMultipartFormData, Vcl.ExtDlgs; төрөл TForm1 = class(TForm) IdHTTP1: TIdHTTP; гарчиг: TEdit; агуулга: TMemo; PostBut: TButton; хариулт: TMemo; Шошго1: TLabel; Шошго2: TLabel; Label3: TLabel; imgfile: TEdit; chk файл: TButton; Шошго4: TLabel; CheckBox1: TCheckBox; PictDialog:TOpenDialog; процедур PostButClick(Илгээгч: TObject); процедур chkfileClick(Илгээгч: TObject); процедур CheckBox1Click(Илгээгч: TObject); private ( Private declarations ) public ( Public declarations ) end; var Form1: TForm1; хэрэгжилт ($R *.dfm) процедур TForm1.CheckBox1Click(Sender: TObject); эхлэх //файлын замын элементүүд болон харилцах товчлууруудыг идэвхтэй эсвэл идэвхгүй болгох imgfile.Enabled:=CheckBox1.Checked; chkfile.Enabled:=CheckBox1.Checked; Төгсгөл; процедур TForm1.chkfileClick(Илгээгч: TObject); эхлэх //харилцах цонхыг нээгээд imgfile(TEdit) дотор файлын бүрэн замыг оруулна уу, хэрэв PictDialog.Execute дараа нь imgfile.Text:= PictDialog.FileName; Төгсгөл; процедур TForm1.PostButClick(Илгээгч: TObject); var dataPost:TIdMultiPartFormDataStream; start dataPost:=TIdMultiPartFormDataStream.Create; dataPost.AddFormField("гарчиг", гарчиг.Текст,"utf-8").ContentTransfer:= "8бит"; dataPost.AddFormField("content",content.Text,"utf-8").ContentTransfer:= "8бит"; хэрэв CheckBox1.Checked ба (trim(imgfile.Text)="") дараа нь //файл сонгогдсон эсэхийг шалгах ShowMessage("Та график файл сонгох ёстой!"); гарах; Төгсгөл; хэрэв CheckBox1.Checked дараа нь dataPost.AddFile("файл", imgfile.Text,""); //файлын хариулт бүхий талбар нэмнэ.Текст:= StringReplace(idHTTP1.Post("http://api..php",dataPost),"
",#13#10,); datapost.Free; төгсгөл; төгсгөл.