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) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
Copy Source | Copy HTML using System; using System.Collections.Generic; using System.Text; namespace HTTPServer { class Server { static void Main( string [] args) { } } }
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
- рдХреНрд▓рд╛рд╕ рд╕рд░реНрд╡рд░
- {
- TcpListener рд╢реНрд░реЛрддрд╛; // рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдЬреЛ рдЯреАрд╕реАрдкреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ
- // рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ ( рдЗрдВрдЯ рдкреЛрд░реНрдЯ)
- {
- // рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ "рд╢реНрд░реЛрддрд╛" рдмрдирд╛рдПрдВ
- рд╢реНрд░реЛрддрд╛ = рдирдпрд╛ TcpListener (IPAddress.Any, Port);
- рд╢реНрд░реЛрддрд╛.рд╢рд░реНрдд (); // рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ
- // рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ
- рдЬрдмрдХрд┐ ( рд╕рдЪ )
- {
- // рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
- рд╢реНрд░реЛрддрд╛ред рдПрд╕реЗрдкреНрдЯрдХреИрдкрдХреНрд▓рд┐рдпреЗрдВрдЯ ();
- }
- }
- // рд╕рд░реНрд╡рд░ рдмрдВрдж рдХрд░реЛ
- ~ рд╕рд░реНрд╡рд░ ()
- {
- // рдпрджрд┐ "рд╢реНрд░реЛрддрд╛" рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
- рдЕрдЧрд░ (рд╢реНрд░реЛрддрд╛! = рдЕрд╢рдХреНрдд )
- {
- // рдЗрд╕реЗ рд░реЛрдХреЗрдВ
- рд╢реНрд░реЛрддрд╛.рд╕рдорд░реНрдерди ();
- }
- }
- рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдореБрдЦреНрдп ( рд╕реНрдЯреНрд░рд┐рдВрдЧ [] args)
- {
- // рдкреЛрд░реНрдЯ 80 рдкрд░ рдПрдХ рдирдпрд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВ
- рдирдпрд╛ рд╕рд░реНрд╡рд░ ( 80 );
- }
- }
рдпрджрд┐ рдЖрдк рдЕрднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрд░реНрдЯ 80 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ... рдпрд╣реА рд╣реИред рдХрдиреЗрдХреНрд╢рди рдХреЗрд╡рд▓ рдХреБрдЫ рднреА рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╣реИрдВрдбрд▓рд░ рдЧрд╛рдпрдм рд╣реИ рдФрд░ рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
- // рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕
- рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ
- {
- // рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ TcpListener рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХ (TcpClient рдЧреНрд░рд╛рд╣рдХ )
- {
- // рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTML рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдХреЛрдб
- string Html = "<html> <body> <h1> рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! </ h1> </ body> </ html>" ;
- // рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░: рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИред рджреЛ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рдж - рд╕рд╛рдордЧреНрд░реА рд╣реА
- string Str = "HTTP / 1.1 200 рдУрдХреЗ \ n рдХреЙрдиреНрдЯреЗрдВрдЯ-рдЯрд╛рдЗрдк: рдЯреЗрдХреНрд╕реНрдЯ / html \ n рдХреЙрдиреНрдЯреЗрдВрдЯ -рд▓реЗрдВрде:" + Html.Length.ToString () + "\ n \ n" + рдПрдЪрдЯреАрдПрдордПрд▓;
- // рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ
- рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдПрдирдХреЛрдбрд┐рдВрдЧ .ASCII.GetBytes (Str);
- // рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВ
- рдЧреНрд░рд╛рд╣рдХ .GetStream ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
- // рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
- рдЧреНрд░рд╛рд╣рдХ .Close ();
- }
- }
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
Copy Source | Copy HTML
- // рд╣рдо рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- рдирдП рдЧреНрд░рд╛рд╣рдХ (рд╢реНрд░реЛрддрд╛ред рдПрд╕реЗрдкреНрдЯрдХреИрдкрдХреНрд▓рд┐рдпрд░ ());
рдЕрдм рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрддрд╛
127.0.0.1 рдЦреЛрд▓реЗрдВ рдФрд░ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рджреЗрдЦреЗрдВ "рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!"
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо HTTP рдЕрдиреБрд░реЛрдз рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдмрдирд╛ рджреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдмрдирд╛рдПрдВ рдпрд╛
рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд░ рдЙрдЪреНрдЪ рднрд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рде-рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдЖрдк рдкреБрд░рд╛рдиреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рддрдм рддрдХ рдЖрдк рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдЖрдкрдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рд╣рдо рдПрдХ рд╕рд░рд▓ рдереНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧреА:
Copy Source | Copy HTML
- рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдЧреНрд░рд╛рд╣рдХ ( рд╡рд╕реНрддреБ рд╕реНрдерд┐рддрд┐)
- {
- рдирдпрд╛ рдЧреНрд░рд╛рд╣рдХ ((TcpClient) StateInfo);
- }
рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдЕрдВрддрд╣реАрди рдЧреНрд░рд╛рд╣рдХ рд░рд┐рд╕реЗрдкреНрд╢рди рдЪрдХреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
Copy Source | Copy HTML
- // рдирдП рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
- TcpClient рдЧреНрд░рд╛рд╣рдХ = рд╢реНрд░реЛрддрд╛ред AcceptTcpClient ();
- // рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ
- рдереНрд░реЗрдб рдереНрд░реЗрдб = рдирдпрд╛ рдереНрд░реЗрдб ( рдирдпрд╛ ParameterizedThreadStart (ClientThread));
- // рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
- рдереНрд░реЗрдб .Start (рдХреНрд▓рд╛рдЗрдВрдЯ);
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Copy Source | Copy HTML
- // рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдПрдХ рдирдП рдереНрд░реЗрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (ClientThread)
- // рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
- ThreadPool.QueueUserWorkItem ( рдирдпрд╛ WaitCallback (ClientThread), Listener.AcceptTcpClient ());
рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
- // рдзрд╛рдЧреЗ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
- // рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП 4 рд╣реЛ
- int MaxThreadsCount = Environment .ProcessorCount * 4 ;
- // рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
- ThreadPool.SetMaxThreads (MaxThreadsCount, MaxThreadsCount);
- // рд╡рд░реНрдХрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
- рдереНрд░реЗрдбрдкреВрд▓ред рд╕реЗрдЯрдорд┐рдирдЯреНрд░реЗрдбреНрд╕ ( 2 , 2 );
рдереНрд░реЗрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдирдВрдмрд░ рдореЗрдВ рдореБрдЦреНрдп рдереНрд░реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рдпреВрдирд┐рдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрдм рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдиреЗ рдХрд╛рдо рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдП рдЧреНрд░рд╛рд╣рдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдпрд╛ рд╕реНрд▓реАрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рддреЛ, рдЕрдм рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдкрд░ рдЬрд╛рдПрдБрдЧреЗ рдФрд░ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
Copy Source | Copy HTML
- // рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрдЯреЛрд░ рдХреА рдЬрд╛рдПрдЧреА
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз = "" ;
- // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░
- рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдирдИ рдмрд╛рдЗрдЯ [ 1024 ];
- // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░
- рдЗрдВрдЯ рдХрд╛рдЙрдВрдЯ;
- // рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ
- рдЬрдмрдХрд┐ (рдХрд╛рдЙрдВрдЯ = рдХреНрд▓рд╛рдЗрдВрдЯ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рдкрдврд╝реЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐))> 0 )
- {
- // рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
- рдирд┐рд╡реЗрджрди + = Encoding.ASCII.GetString ( рдмрдлрд░ , 0 , рдЧрдгрдирд╛);
- // рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдиреБрдХреНрд░рдо \ r \ n \ r \ n рд╕реЗ рдЯреВрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП
- // рдпрд╛ рддреЛ рд╣рдо рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ
- // рд╣рдореЗрдВ POST рдЕрдиреБрд░реЛрдз (рдЖрджрд┐) рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдз рд╣реИ
- // рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
- if (Request.IndexOf ( "\ r \ n \ r \ n" )> = 0 || рдЕрдиреБрд░реЛрдзред рдЧрддрд┐> 4096 )
- {
- рддреЛрдбрд╝рдирд╛ ;
- }
- }
рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ:
Copy Source | Copy HTML
- // рд░реЗрдЧреНрдпреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
- // рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ GET рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рднреА рдЪрд░ рдХрд╛рдЯ рджрд┐рдП
- рдореИрдЪ ReqMatch = Regex ред рдорд┐рд▓рд╛рди (рдЕрдиреБрд░реЛрдз, @ "^ \ w + \ s + ([^ \ s \?] +) [^ \ S] * \ s + HTTP /.* |" );
- // рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд░рд╣рд╛
- рдЕрдЧрд░ (рд░реАрдХрдореИрдЪ == рдореИрдЪред рдЦрд╛рд▓реА)
- {
- // рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рддреНрд░реБрдЯрд┐ 400 - рдЕрдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз
- SendError (рдХреНрд▓рд╛рдЗрдВрдЯ, 400 );
- рд╡рд╛рдкрд╕реА;
- }
- // рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- string RequestUri = ReqMatch.Groups [ 1 ] .Value;
- // рдЗрд╕реЗ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдХрдо рдХрд░реЗрдВ, рдмрдЪ рдЧрдП рд╡рд░реНрдгреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛
- // рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "% 20" -> ""
- RequestUri = Uri .UnescapeDataString (RequestUri);
- // рдпрджрд┐ рд░реЗрдЦрд╛ рдореЗрдВ рдХреЛрдИ рдХреЙрд▓рди рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ 400 рднреЗрдЬреЗрдВ
- // http://example.com/../../file.txt рдЬреИрд╕реЗ URL рд╕реЗ рдмрдЪрд╛рд╡ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдЕрдЧрд░ (RequestUri.IndexOf ( ".." )> = 0 )
- {
- SendError (рдХреНрд▓рд╛рдЗрдВрдЯ, 400 );
- рд╡рд╛рдкрд╕реА;
- }
- // рдпрджрд┐ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрди "/" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ index.html рдЬреЛрдбрд╝реЗрдВ
- рдЕрдЧрд░ (RequestUri.EndsWith ( "/" ))
- {
- RequestUri + = "index.html" ;
- }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдлрд╛рдЗрд▓ рд╣реИ, рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред
Copy Source | Copy HTML
- string FilePath = "www /" + RequestUri;
- // рдпрджрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ www рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ 404 рддреНрд░реБрдЯрд┐ рднреЗрдЬреЗрдВ
- рдпрджрд┐ ( рдлрд╝рд╛рдЗрд▓ ! .Exists (FilePath))
- {
- SendError (рдЧреНрд░рд╛рд╣рдХ, 404 );
- рд╡рд╛рдкрд╕реА;
- }
- // рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- string Extension = RequestUri.Substring (RequestUri.LastIndexOf ( 'ред' ));
- // рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░
- string ContentType = "" ;
- // рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛
- рд╕реНрд╡рд┐рдЪ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди)
- {
- рдорд╛рдорд▓рд╛ ".htm" :
- рдорд╛рдорд▓рд╛ ".html" :
- ContentType = "text / html" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдорд╛рдорд▓рд╛ ".css" :
- рдХрдВрдЯреЗрдВрдЯ рдЯрд╛рдЗрдк = "рдЯреЗрдХреНрд╕реНрдЯ / рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдорд╛рдорд▓рд╛ ".js" :
- ContentType = "text / javascript" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдорд╛рдорд▓рд╛ ".jpg" :
- ContentType = "image / jpeg" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдорд╛рдорд▓рд╛ ".jpeg" :
- рдорд╛рдорд▓рд╛ ".png" :
- рдорд╛рдорд▓рд╛ ".gif" :
- ContentType = "image /" + Extension.Substring ( 1 );
- рддреЛрдбрд╝рдирд╛ ;
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ :
- рдЕрдЧрд░ (Extension.Length> 1 )
- {
- ContentType = "application /" + Extension.Substring ( 1 );
- }
- рдЕрдиреНрдпрдерд╛
- {
- ContentType = "рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЕрдЬреНрдЮрд╛рдд" ;
- }
- рддреЛрдбрд╝рдирд╛ ;
- }
- // рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреАрдорд╛
- рдлрд╛рдЗрд▓рд╕реНрдЯреНрд░реАрдо рдПрдлрдПрд╕;
- рдХреЛрд╢рд┐рд╢
- {
- FS = рдирдпрд╛ FileStream (FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
- }
- рдкрдХрдбрд╝рдирд╛ ( рдЕрдкрд╡рд╛рдж )
- {
- // рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 500 рддреНрд░реБрдЯрд┐ рднреЗрдЬреЗрдВ
- SendError (рдЧреНрд░рд╛рд╣рдХ, 500 );
- рд╡рд╛рдкрд╕реА;
- }
- // рд╣реЗрдбрд░ рднреЗрдЬреЗрдВ
- string Headers = "HTTP / 1.1 200 OK \ nContent-Type:" + ContentType + "\ nContent- рд▓рдВрдмрд╛рдИ:" + FS.Length + "\ n \ n" ;
- рдмрд╛рдЗрдЯ [] рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░ = рдПрдиреНрдХреЛрдбрд┐рдВрдЧ.рдПрдПрд╕рд╕реАрдЖрдИрдЖрдИ.рдЧреЗрдЯрдмрд╛рдЗрдЯреНрд╕ (рд╣реЗрдбрд░реНрд╕);
- Client.GetStream ()ред рд▓рд┐рдЦреЗрдВ (рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░, 0 , рд╣реЗрдбрд░реНрд╕рдмрдлрд╝рд░.рд▓рд┐рдлреНрдЯрд░);
- // рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ
- рдЬрдмрдХрд┐ (FS.Position <FS.Length)
- {
- // рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ
- рдЧрд┐рдирдирд╛ = рдПрдлрдПрд╕.рд╣реЗрдб ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
- // рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
- рдЧреНрд░рд╛рд╣рдХ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдЧрдгрдирд╛);
- }
- // рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
- FS.Close ();
- рдЧреНрд░рд╛рд╣рдХред рдХреНрд▓реЛрдЬрд╝ ();
рдХреЛрдб рдиреЗ SendError рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рднреА рд▓рд┐рдЦреЗрдВ:
Copy Source | Copy HTML
- // рддреНрд░реБрдЯрд┐ рдкреЗрдЬ рднреЗрдЬрдирд╛
- рдирд┐рдЬреА рд╢реВрдиреНрдп SendError ( TcpClient рдЧреНрд░рд╛рд╣рдХ, рдЗрдВрдЯ рдХреЛрдб)
- {
- // рдлреЙрд░реНрдо рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ "200 рдареАрдХ рд╣реИ"
- // HttpStatusCode рд╕рднреА HTTP / 1.1 рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ
- string CodeStr = Code.ToString () + "" + ((HttpStatusCode) рдХреЛрдб) .ToString ();
- // рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTML рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдХреЛрдб
- string Html = "<html> <body> <h1>" + CodeStr + "</ h1> </ body> </ html>" ;
- // рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░: рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИред рджреЛ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рдж - рд╕рд╛рдордЧреНрд░реА рд╣реА
- string Str = "HTTP / 1.1" + CodeStr + "\ n рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / html \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ:" + Html.Length.ToString () + "\ n \ n" + Html;
- // рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ
- рдмрд╛рдЗрдЯ [] рдмрдлрд╝рд░ = рдПрдирдХреЛрдбрд┐рдВрдЧ .ASCII.GetBytes (Str);
- // рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВ
- рдЧреНрд░рд╛рд╣рдХ.рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо ()ред рд▓рд┐рдЦреЗрдВ ( рдмрдлрд░ , 0 , рдмрдлрд░ред рдЧрддрд┐);
- // рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ
- рдЧреНрд░рд╛рд╣рдХред рдХреНрд▓реЛрдЬрд╝ ();
- }
рдпрд╣ рдПрдХ рд╕рд░рд▓ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реНрдереИрддрд┐рдХ рджреЗрддрд╛ рд╣реИ, рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд░рд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдкрддрд╛ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреИрдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдбреЛрдореЗрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ, mod_rewrite рдЬреИрд╕реЗ рдкрддреЗ рдмрджрд▓рдиреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ CGI рдХрд╛ рд╕рдорд░реНрдерди рднреАред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реЛрдЧреА :-)
рд╕реНрд░реЛрдд (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)рд╕реНрд░реЛрдд (рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)рдкреБрд░рд╛рд▓реЗрдЦ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХреА)рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧреНрд░рд╣ (рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)