рд╕реА # рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡рд░ 15 рдорд┐рдирдЯ рдореЗрдВ

C # рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд▓рдЪреАрд▓реА рднрд╛рд╖рд╛ рд╣реИред .NET рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдХреБрдЫ рддреИрдпрд╛рд░ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ рдФрд░ рднреА рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИрдВред рдЗрддрдирд╛ рд╣реА рдХрд┐ рдХреЗрд╡рд▓ 15 рдорд┐рдирдЯ рдореЗрдВ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб HTTP рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЖрдк рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП HttpListener рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреЗрдЬрд╝реА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЖрдк C # рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ:
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  1. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  2. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  3. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  4. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  5. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  6. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  7. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  8. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  9. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  10. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  11. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
  12. Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }

.NET рдореЗрдВ, рдЖрдк TcpListener рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЯреАрд╕реАрдкреА рд╕рд░реНрд╡рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
Copy Source | Copy HTML
  1. рдХреНрд▓рд╛рд╕ рд╕рд░реНрд╡рд░
  2. {
  3. TcpListener рд╢реНрд░реЛрддрд╛; // рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдЬреЛ рдЯреАрд╕реАрдкреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ
  4. // рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ ( рдЗрдВрдЯ рдкреЛрд░реНрдЯ)
  6. {
  7. // рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ "рд╢реНрд░реЛрддрд╛" рдмрдирд╛рдПрдВ
  8. рд╢реНрд░реЛрддрд╛ = рдирдпрд╛ TcpListener (IPAddress.Any, Port);
  9. рд╢реНрд░реЛрддрд╛.рд╢рд░реНрдд (); // рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ
  10. // рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ
  11. рдЬрдмрдХрд┐ ( рд╕рдЪ )
  12. {
  13. // рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
  14. рд╢реНрд░реЛрддрд╛ред рдПрд╕реЗрдкреНрдЯрдХреИрдкрдХреНрд▓рд┐рдпреЗрдВрдЯ ();
  15. }
  16. }
  17. // рд╕рд░реНрд╡рд░ рдмрдВрдж рдХрд░реЛ
  18. ~ рд╕рд░реНрд╡рд░ ()
  19. {
  20. // рдпрджрд┐ "рд╢реНрд░реЛрддрд╛" рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
  21. рдЕрдЧрд░ (рд╢реНрд░реЛрддрд╛! = рдЕрд╢рдХреНрдд )
  22. {
  23. // рдЗрд╕реЗ рд░реЛрдХреЗрдВ
  24. рд╢реНрд░реЛрддрд╛.рд╕рдорд░реНрдерди ();
  25. }
  26. }
  27. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдореБрдЦреНрдп ( рд╕реНрдЯреНрд░рд┐рдВрдЧ [] args)
  28. {
  29. // рдкреЛрд░реНрдЯ 80 рдкрд░ рдПрдХ рдирдпрд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВ
  30. рдирдпрд╛ рд╕рд░реНрд╡рд░ ( 80 );
  31. }
  32. }

рдпрджрд┐ рдЖрдк рдЕрднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрд░реНрдЯ 80 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ... рдпрд╣реА рд╣реИред рдХрдиреЗрдХреНрд╢рди рдХреЗрд╡рд▓ рдХреБрдЫ рднреА рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╣реИрдВрдбрд▓рд░ рдЧрд╛рдпрдм рд╣реИ рдФрд░ рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
  1. // рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕
  2. рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ
  3. {
  4. // рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ TcpListener рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХ (TcpClient рдЧреНрд░рд╛рд╣рдХ )
  6. {
  7. // рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTML рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  8. string Html = "<html> <body> <h1> рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! </ h1> </ body> </ html>" ;
  9. // рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░: рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИред рджреЛ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рдж - рд╕рд╛рдордЧреНрд░реА рд╣реА
  10. string Str = "HTTP / 1.1 200 рдУрдХреЗ \ n рдХреЙрдиреНрдЯреЗрдВрдЯ-рдЯрд╛рдЗрдк: рдЯреЗрдХреНрд╕реНрдЯ / html \ n рдХреЙрдиреНрдЯреЗрдВрдЯ -рд▓реЗрдВрде:" + Html.Length.ToString () + "\ n \ n" + рдПрдЪрдЯреАрдПрдордПрд▓;
  11. // рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ
  12. рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдПрдирдХреЛрдбрд┐рдВрдЧ .ASCII.GetBytes (Str);
  13. // рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВ
  14. рдЧреНрд░рд╛рд╣рдХ .GetStream ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
  15. // рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
  16. рдЧреНрд░рд╛рд╣рдХ .Close ();
  17. }
  18. }

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
Copy Source | Copy HTML
  1. // рд╣рдо рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
  2. рдирдП рдЧреНрд░рд╛рд╣рдХ (рд╢реНрд░реЛрддрд╛ред рдПрд╕реЗрдкреНрдЯрдХреИрдкрдХреНрд▓рд┐рдпрд░ ());

рдЕрдм рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрддрд╛ 127.0.0.1 рдЦреЛрд▓реЗрдВ рдФрд░ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рджреЗрдЦреЗрдВ "рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!"
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо HTTP рдЕрдиреБрд░реЛрдз рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдмрдирд╛ рджреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдмрдирд╛рдПрдВ рдпрд╛ рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд░ рдЙрдЪреНрдЪ рднрд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рде-рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдЖрдк рдкреБрд░рд╛рдиреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рддрдм рддрдХ рдЖрдк рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдЖрдкрдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рд╣рдо рдПрдХ рд╕рд░рд▓ рдереНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧреА:
Copy Source | Copy HTML
  1. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдЧреНрд░рд╛рд╣рдХ ( рд╡рд╕реНрддреБ рд╕реНрдерд┐рддрд┐)
  2. {
  3. рдирдпрд╛ рдЧреНрд░рд╛рд╣рдХ ((TcpClient) StateInfo);
  4. }

рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдЕрдВрддрд╣реАрди рдЧреНрд░рд╛рд╣рдХ рд░рд┐рд╕реЗрдкреНрд╢рди рдЪрдХреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
Copy Source | Copy HTML
  1. // рдирдП рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
  2. TcpClient рдЧреНрд░рд╛рд╣рдХ = рд╢реНрд░реЛрддрд╛ред AcceptTcpClient ();
  3. // рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ
  4. рдереНрд░реЗрдб рдереНрд░реЗрдб = рдирдпрд╛ рдереНрд░реЗрдб ( рдирдпрд╛ ParameterizedThreadStart (ClientThread));
  5. // рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
  6. рдереНрд░реЗрдб .Start (рдХреНрд▓рд╛рдЗрдВрдЯ);

рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Copy Source | Copy HTML
  1. // рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдПрдХ рдирдП рдереНрд░реЗрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (ClientThread)
  2. // рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
  3. ThreadPool.QueueUserWorkItem ( рдирдпрд╛ WaitCallback (ClientThread), Listener.AcceptTcpClient ());

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
  1. // рдзрд╛рдЧреЗ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  2. // рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП 4 рд╣реЛ
  3. int MaxThreadsCount = Environment .ProcessorCount * 4 ;
  4. // рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
  5. ThreadPool.SetMaxThreads (MaxThreadsCount, MaxThreadsCount);
  6. // рд╡рд░реНрдХрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
  7. рдереНрд░реЗрдбрдкреВрд▓ред рд╕реЗрдЯрдорд┐рдирдЯреНрд░реЗрдбреНрд╕ ( 2 , 2 );

рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдирдВрдмрд░ рдореЗрдВ рдореБрдЦреНрдп рдереНрд░реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рдпреВрдирд┐рдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрдм рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдиреЗ рдХрд╛рдо рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдП рдЧреНрд░рд╛рд╣рдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдпрд╛ рд╕реНрд▓реАрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рддреЛ, рдЕрдм рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдкрд░ рдЬрд╛рдПрдБрдЧреЗ рдФрд░ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
Copy Source | Copy HTML
  1. // рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрдЯреЛрд░ рдХреА рдЬрд╛рдПрдЧреА
  2. рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз = "" ;
  3. // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░
  4. рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдирдИ рдмрд╛рдЗрдЯ [ 1024 ];
  5. // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░
  6. рдЗрдВрдЯ рдХрд╛рдЙрдВрдЯ;
  7. // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ
  8. рдЬрдмрдХрд┐ (рдХрд╛рдЙрдВрдЯ = рдХреНрд▓рд╛рдЗрдВрдЯ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рдкрдврд╝реЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐))> 0 )
  9. {
  10. // рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
  11. рдирд┐рд╡реЗрджрди + = Encoding.ASCII.GetString ( рдмрдлрд░ , 0 , рдЧрдгрдирд╛);
  12. // рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдиреБрдХреНрд░рдо \ r \ n \ r \ n рд╕реЗ рдЯреВрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП
  13. // рдпрд╛ рддреЛ рд╣рдо рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ
  14. // рд╣рдореЗрдВ POST рдЕрдиреБрд░реЛрдз (рдЖрджрд┐) рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдз рд╣реИ
  15. // рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  16. if (Request.IndexOf ( "\ r \ n \ r \ n" )> = 0 || рдЕрдиреБрд░реЛрдзред рдЧрддрд┐> 4096 )
  17. {
  18. рддреЛрдбрд╝рдирд╛ ;
  19. }
  20. }

рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
  1. // рд░реЗрдЧреНрдпреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
  2. // рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ GET рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рднреА рдЪрд░ рдХрд╛рдЯ рджрд┐рдП
  3. рдореИрдЪ ReqMatch = Regex ред рдорд┐рд▓рд╛рди (рдЕрдиреБрд░реЛрдз, @ "^ \ w + \ s + ([^ \ s \?] +) [^ \ S] * \ s + HTTP /.* |" );
  4. // рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд░рд╣рд╛
  5. рдЕрдЧрд░ (рд░реАрдХрдореИрдЪ == рдореИрдЪред рдЦрд╛рд▓реА)
  6. {
  7. // рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рддреНрд░реБрдЯрд┐ 400 - рдЕрдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз
  8. SendError (рдХреНрд▓рд╛рдЗрдВрдЯ, 400 );
  9. рд╡рд╛рдкрд╕реА;
  10. }
  11. // рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  12. string RequestUri = ReqMatch.Groups [ 1 ] .Value;
  13. // рдЗрд╕реЗ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдХрдо рдХрд░реЗрдВ, рдмрдЪ рдЧрдП рд╡рд░реНрдгреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛
  14. // рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "% 20" -> ""
  15. RequestUri = Uri .UnescapeDataString (RequestUri);
  16. // рдпрджрд┐ рд░реЗрдЦрд╛ рдореЗрдВ рдХреЛрдИ рдХреЙрд▓рди рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ 400 рднреЗрдЬреЗрдВ
  17. // http://example.com/../../file.txt рдЬреИрд╕реЗ URL рд╕реЗ рдмрдЪрд╛рд╡ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  18. рдЕрдЧрд░ (RequestUri.IndexOf ( ".." )> = 0 )
  19. {
  20. SendError (рдХреНрд▓рд╛рдЗрдВрдЯ, 400 );
  21. рд╡рд╛рдкрд╕реА;
  22. }
  23. // рдпрджрд┐ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрди "/" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ index.html рдЬреЛрдбрд╝реЗрдВ
  24. рдЕрдЧрд░ (RequestUri.EndsWith ( "/" ))
  25. {
  26. RequestUri + = "index.html" ;
  27. }

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдлрд╛рдЗрд▓ рд╣реИ, рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред
Copy Source | Copy HTML
  1. string FilePath = "www /" + RequestUri;
  2. // рдпрджрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ www рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ 404 рддреНрд░реБрдЯрд┐ рднреЗрдЬреЗрдВ
  3. рдпрджрд┐ ( рдлрд╝рд╛рдЗрд▓ ! .Exists (FilePath))
  4. {
  5. SendError (рдЧреНрд░рд╛рд╣рдХ, 404 );
  6. рд╡рд╛рдкрд╕реА;
  7. }
  8. // рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  9. string Extension = RequestUri.Substring (RequestUri.LastIndexOf ( 'ред' ));
  10. // рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░
  11. string ContentType = "" ;
  12. // рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛
  13. рд╕реНрд╡рд┐рдЪ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди)
  14. {
  15. рдорд╛рдорд▓рд╛ ".htm" :
  16. рдорд╛рдорд▓рд╛ ".html" :
  17. ContentType = "text / html" ;
  18. рддреЛрдбрд╝рдирд╛ ;
  19. рдорд╛рдорд▓рд╛ ".css" :
  20. рдХрдВрдЯреЗрдВрдЯ рдЯрд╛рдЗрдк = "рдЯреЗрдХреНрд╕реНрдЯ / рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ" ;
  21. рддреЛрдбрд╝рдирд╛ ;
  22. рдорд╛рдорд▓рд╛ ".js" :
  23. ContentType = "text / javascript" ;
  24. рддреЛрдбрд╝рдирд╛ ;
  25. рдорд╛рдорд▓рд╛ ".jpg" :
  26. ContentType = "image / jpeg" ;
  27. рддреЛрдбрд╝рдирд╛ ;
  28. рдорд╛рдорд▓рд╛ ".jpeg" :
  29. рдорд╛рдорд▓рд╛ ".png" :
  30. рдорд╛рдорд▓рд╛ ".gif" :
  31. ContentType = "image /" + Extension.Substring ( 1 );
  32. рддреЛрдбрд╝рдирд╛ ;
  33. рдбрд┐рдлрд╝реЙрд▓реНрдЯ :
  34. рдЕрдЧрд░ (Extension.Length> 1 )
  35. {
  36. ContentType = "application /" + Extension.Substring ( 1 );
  37. }
  38. рдЕрдиреНрдпрдерд╛
  39. {
  40. ContentType = "рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЕрдЬреНрдЮрд╛рдд" ;
  41. }
  42. рддреЛрдбрд╝рдирд╛ ;
  43. }
  44. // рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреАрдорд╛
  45. рдлрд╛рдЗрд▓рд╕реНрдЯреНрд░реАрдо рдПрдлрдПрд╕;
  46. рдХреЛрд╢рд┐рд╢
  47. {
  48. FS = рдирдпрд╛ FileStream (FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
  49. }
  50. рдкрдХрдбрд╝рдирд╛ ( рдЕрдкрд╡рд╛рдж )
  51. {
  52. // рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 500 рддреНрд░реБрдЯрд┐ рднреЗрдЬреЗрдВ
  53. SendError (рдЧреНрд░рд╛рд╣рдХ, 500 );
  54. рд╡рд╛рдкрд╕реА;
  55. }
  56. // рд╣реЗрдбрд░ рднреЗрдЬреЗрдВ
  57. string Headers = "HTTP / 1.1 200 OK \ nContent-Type:" + ContentType + "\ nContent- рд▓рдВрдмрд╛рдИ:" + FS.Length + "\ n \ n" ;
  58. рдмрд╛рдЗрдЯ [] рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░ = рдПрдиреНрдХреЛрдбрд┐рдВрдЧ.рдПрдПрд╕рд╕реАрдЖрдИрдЖрдИ.рдЧреЗрдЯрдмрд╛рдЗрдЯреНрд╕ (рд╣реЗрдбрд░реНрд╕);
  59. Client.GetStream ()ред рд▓рд┐рдЦреЗрдВ (рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░, 0 , рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░.рд▓рд┐рдлреНрдЯрд░);
  60. // рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ
  61. рдЬрдмрдХрд┐ (FS.Position <FS.Length)
  62. {
  63. // рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ
  64. рдЧрд┐рдирдирд╛ = рдПрдлрдПрд╕.рд╣реЗрдб ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
  65. // рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
  66. рдЧреНрд░рд╛рд╣рдХ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдЧрдгрдирд╛);
  67. }
  68. // рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
  69. FS.Close ();
  70. рдЧреНрд░рд╛рд╣рдХред рдХреНрд▓реЛрдЬрд╝ ();

рдХреЛрдб рдиреЗ SendError рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рднреА рд▓рд┐рдЦреЗрдВ:
Copy Source | Copy HTML
  1. // рддреНрд░реБрдЯрд┐ рдкреЗрдЬ рднреЗрдЬрдирд╛
  2. рдирд┐рдЬреА рд╢реВрдиреНрдп SendError ( TcpClient рдЧреНрд░рд╛рд╣рдХ, рдЗрдВрдЯ рдХреЛрдб)
  3. {
  4. // рдлреЙрд░реНрдо рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ "200 рдареАрдХ рд╣реИ"
  5. // HttpStatusCode рд╕рднреА HTTP / 1.1 рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ
  6. string CodeStr = Code.ToString () + "" + ((HttpStatusCode) рдХреЛрдб) .ToString ();
  7. // рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTML рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  8. string Html = "<html> <body> <h1>" + CodeStr + "</ h1> </ body> </ html>" ;
  9. // рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░: рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИред рджреЛ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рдж - рд╕рд╛рдордЧреНрд░реА рд╣реА
  10. string Str = "HTTP / 1.1" + CodeStr + "\ n рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / html \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ:" + Html.Length.ToString () + "\ n \ n" + Html;
  11. // рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ
  12. рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдПрдирдХреЛрдбрд┐рдВрдЧ .ASCII.GetBytes (Str);
  13. // рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВ
  14. рдЧреНрд░рд╛рд╣рдХ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
  15. // рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
  16. рдЧреНрд░рд╛рд╣рдХред рдХреНрд▓реЛрдЬрд╝ ();
  17. }

рдпрд╣ рдПрдХ рд╕рд░рд▓ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реНрдереИрддрд┐рдХ рджреЗрддрд╛ рд╣реИ, рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд░рд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдкрддрд╛ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреИрдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдбреЛрдореЗрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ, mod_rewrite рдЬреИрд╕реЗ рдкрддреЗ рдмрджрд▓рдиреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ CGI рдХрд╛ рд╕рдорд░реНрдерди рднреАред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реЛрдЧреА :-)

рд╕реНрд░реЛрдд (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
рд╕реНрд░реЛрдд (рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
рдкреБрд░рд╛рд▓реЗрдЦ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХреА)
рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧреНрд░рд╣ (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)


Source: https://habr.com/ru/post/In120157/


All Articles