แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒแƒกแƒ˜แƒžแƒ”แƒ“แƒ˜แƒก แƒแƒœ แƒ™แƒšแƒ˜แƒ”แƒœแƒข-แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ C# .Net แƒฉแƒแƒ แƒฉแƒแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜

Entry

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒจแƒ˜แƒœ แƒ“แƒแƒ˜แƒฌแƒงแƒ, แƒ แƒแƒชแƒ แƒ™แƒแƒšแƒ”แƒ’แƒแƒ› แƒจแƒ”แƒ›แƒแƒ›แƒ—แƒแƒ•แƒแƒ–แƒ แƒžแƒแƒขแƒแƒ แƒ แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ. แƒ”แƒก แƒ แƒแƒฆแƒแƒช แƒขแƒ˜แƒœแƒ“แƒ”แƒ แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒฃแƒœแƒ“แƒ แƒงแƒแƒคแƒ˜แƒšแƒ˜แƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› IT hangout-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒแƒ‘แƒ แƒฃแƒ™แƒ˜แƒ“แƒฃแƒ แƒ”แƒกแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ, แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ•แƒกแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒคแƒ˜แƒšแƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒฎแƒแƒ แƒ— แƒ›แƒ—แƒแƒ•แƒแƒ  แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ–แƒ”, แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ—แƒแƒœแƒแƒ›แƒแƒกแƒแƒฃแƒ‘แƒ แƒ˜แƒก แƒžแƒแƒ•แƒœแƒแƒ–แƒ” แƒ“แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ แƒแƒฎแƒแƒš แƒœแƒแƒชแƒœแƒแƒ‘แƒ”แƒ‘แƒ–แƒ”.

แƒแƒฅ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ” แƒ“แƒ แƒชแƒแƒขแƒ แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒแƒช แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ, แƒ แƒแƒ—แƒ แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒฃแƒคแƒ แƒ แƒœแƒแƒ—แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒก, แƒ แƒแƒขแƒแƒ› แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ’แƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒจแƒ˜.

แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒกแƒขแƒฃแƒ“แƒ˜แƒแƒจแƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒแƒก แƒ•แƒ˜แƒ™แƒแƒ•แƒ”แƒ‘, แƒฉแƒ”แƒ›แƒ˜ C# แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒแƒก Unity-แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ, แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒแƒœแƒ“แƒ แƒแƒ˜แƒ“แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒœแƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ–แƒ”. แƒแƒ› แƒกแƒแƒ›แƒงแƒแƒ แƒแƒก แƒ’แƒแƒ แƒ”แƒ—, แƒ›แƒ” แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ›แƒ˜แƒ แƒฉแƒ”แƒ•แƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒ›แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ.

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 1: แƒฉแƒแƒ แƒฉแƒแƒก แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒ แƒ”แƒ‘แƒ

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ แƒแƒ’แƒแƒ แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ. แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒ–แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒฎแƒ˜แƒก แƒ›แƒ–แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒžแƒแƒ•แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒ“แƒแƒช, แƒ แƒแƒ’แƒแƒ แƒช แƒ‘แƒฃแƒก แƒ’แƒšแƒแƒ‘แƒฃแƒกแƒ–แƒ”, แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ™แƒ˜แƒก แƒ›แƒแƒ–แƒ˜แƒ“แƒ•แƒแƒก แƒ“แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒแƒฅแƒ›แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒแƒก แƒกแƒแƒ–แƒแƒ’แƒแƒ“แƒแƒ”แƒ‘แƒ˜แƒก แƒชแƒ”แƒœแƒ–แƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ, แƒ›แƒ” แƒแƒ›แƒแƒจแƒ˜ แƒ•แƒ”แƒ แƒแƒ•แƒ˜แƒ—แƒแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒ•แƒ แƒ“แƒ แƒแƒ–แƒ แƒ˜ แƒ•แƒ”แƒ  แƒ“แƒแƒ•แƒ˜แƒœแƒแƒฎแƒ” แƒ“แƒ แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒ•แƒ”แƒ‘ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒ—แƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ.

แƒ™แƒ•แƒšแƒ”แƒ•แƒ C#.Net-แƒ–แƒ” แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ˜แƒ— แƒ“แƒแƒ˜แƒฌแƒงแƒ. แƒแƒฅ แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ’แƒ–แƒ. แƒฅแƒกแƒ”แƒšแƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ ASP.Net แƒแƒœ Azure แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜, TcpHttp แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

ASP-แƒ—แƒแƒœ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ” แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ’แƒแƒ•แƒแƒฃแƒฅแƒ›แƒ”, แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒซแƒแƒšแƒ˜แƒแƒœ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒแƒ› แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ”แƒ“แƒกแƒแƒช, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ” แƒซแƒ”แƒ‘แƒœแƒ. แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒ’แƒแƒฉแƒœแƒ“แƒ TCP แƒ“แƒ Http แƒ™แƒšแƒ˜แƒ”แƒœแƒข-แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒจแƒแƒ แƒ˜แƒก. แƒแƒฅ, แƒฐแƒแƒ‘แƒ แƒ”แƒ–แƒ”, แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒซแƒแƒคแƒ˜แƒแƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒคแƒแƒ™แƒฃแƒกแƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ TCP แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒ–แƒ”, แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒ“แƒ˜, แƒ แƒแƒ› http แƒแƒ  แƒ›แƒแƒ›แƒชแƒ”แƒ›แƒ“แƒ แƒ™แƒ แƒแƒก-แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก.

แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒ“แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒแƒก, แƒ•แƒ”แƒ‘ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—. แƒ“แƒ แƒ“แƒแƒ›แƒฌแƒงแƒ”แƒ‘แƒ—แƒแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ•แƒแƒจแƒ”แƒœแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜ แƒกแƒแƒ˜แƒขแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ—แƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ›แƒ”แƒซแƒšแƒแƒก แƒแƒฅ แƒ“แƒแƒ•แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒแƒœแƒ“แƒ แƒแƒ˜แƒ“แƒ–แƒ” แƒ“แƒ ios-แƒ–แƒ”.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒแƒ“แƒ˜
แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ—แƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ’แƒแƒฃแƒ—แƒแƒ•แƒ”แƒ‘แƒ”แƒš แƒชแƒ˜แƒ™แƒšแƒจแƒ˜:

using System;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace ClearServer
{

    class Server
    {
        TcpListener Listener;
        public Server(int Port)
        {
            Listener = new TcpListener(IPAddress.Any, Port);
            Listener.Start();

            while (true)
            {
                TcpClient Client = Listener.AcceptTcpClient();
                Thread Thread = new Thread(new ParameterizedThreadStart(ClientThread));
                Thread.Start(Client);
            }
        }

        static void ClientThread(Object StateInfo)
        {
            new Client((TcpClient)StateInfo);
        }

        ~Server()
        {
            if (Listener != null)
            {
                Listener.Stop();
            }
        }

        static void Main(string[] args)
        {
            DatabaseWorker sqlBase = DatabaseWorker.GetInstance;

            new Server(80);
        }
    }
}

แƒ—แƒแƒ•แƒแƒ“ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;

namespace ClearServer
{
    class Client
    {


        public Client(TcpClient Client)
        {

            string Message = "";
            byte[] Buffer = new byte[1024];
            int Count;
            while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
            {
                Message += Encoding.UTF8.GetString(Buffer, 0, Count);

                if (Message.IndexOf("rnrn") >= 0 || Message.Length > 4096)
                {
                    Console.WriteLine(Message);
                    break;
                }
            }

            Match ReqMatch = Regex.Match(Message, @"^w+s+([^s?]+)[^s]*s+HTTP/.*|");
            if (ReqMatch == Match.Empty)
            {
                ErrorWorker.SendError(Client, 400);
                return;
            }
            string RequestUri = ReqMatch.Groups[1].Value;
            RequestUri = Uri.UnescapeDataString(RequestUri);
            if (RequestUri.IndexOf("..") >= 0)
            {
                ErrorWorker.SendError(Client, 400);
                return;
            }
            if (RequestUri.EndsWith("/"))
            {
                RequestUri += "index.html";
            }

            string FilePath =

quot;D:/Web/TestSite{RequestUri}";

if (!File.Exists(FilePath))
{
ErrorWorker.SendError(Client, 404);
return;
}

string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.'));

string ContentType = "";

switch (Extension)
{
case ".htm":
case ".html":
ContentType = "text/html";
break;
case ".css":
ContentType = "text/css";
break;
case ".js":
ContentType = "text/javascript";
break;
case ".jpg":
ContentType = "image/jpeg";
break;
case ".jpeg":
case ".png":
case ".gif":
ContentType =

quot;image/{Extension.Substring(1)}";
break;
default:
if (Extension.Length > 1)
{
ContentType =

quot;application/{Extension.Substring(1)}";
}
else
{
ContentType = "application/unknown";
}
break;
}

FileStream FS;
try
{
FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch (Exception)
{
ErrorWorker.SendError(Client, 500);
return;
}

string Headers =

quot;HTTP/1.1 200 OKnContent-Type: {ContentType}nContent-Length: {FS.Length}nn";
byte[] HeadersBuffer = Encoding.ASCII.GetBytes(Headers);
Client.GetStream().Write(HeadersBuffer, 0, HeadersBuffer.Length);

while (FS.Position < FS.Length)
{
Count = FS.Read(Buffer, 0, Buffer.Length);
Client.GetStream().Write(Buffer, 0, Count);
}

FS.Close();
Client.Close();
}
}
}


แƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• SQL-แƒ–แƒ”:
using System;
using System.Data.Linq;
namespace ClearServer
{
    class DatabaseWorker
    {

        private static DatabaseWorker instance;

        public static DatabaseWorker GetInstance
        {
            get
            {
                if (instance == null)
                    instance = new DatabaseWorker();
                return instance;
            }
        }


        private DatabaseWorker()
        {
            string connectionStr = databasePath;
            using (DataContext db = new DataContext(connectionStr))
            {
                Table<User> users = db.GetTable<User>();
                foreach (var item in users)
                {
                    Console.WriteLine(

quot;{item.login} {item.password}");
}
}
}
}
}


แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ”แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒชแƒแƒขแƒแƒ—แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒกแƒ’แƒแƒœ. แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒแƒฅ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ“แƒแƒœ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ (แƒ แƒแƒช, แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒ).

แƒ—แƒแƒ•แƒ˜ 2

แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜ แƒ“แƒแƒกแƒ™แƒ•แƒœแƒแƒ›แƒ“แƒ”, แƒ แƒแƒ› แƒ”แƒก แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ (แƒกแƒžแƒแƒ˜แƒšแƒ”แƒ แƒ˜: แƒแƒ แƒ), แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒกแƒ” แƒ แƒแƒ›, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ›แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒจแƒ”แƒซแƒ”แƒœแƒ.
แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ“แƒ. แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ“แƒแƒ›แƒ”แƒœแƒ˜ แƒ“แƒ ssl แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ.

แƒชแƒแƒขแƒ แƒ›แƒ”แƒขแƒ˜ แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฆแƒฌแƒ”แƒ แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒแƒก แƒ“แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒก
แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ, แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—.

using System;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Security;
using System.Security.Cryptography.X509Certificates;
using System.Security.Permissions;
using System.Security.Policy;
using System.Threading;


namespace ClearServer
{

    sealed class Server
    {
        readonly bool ServerRunning = true;
        readonly TcpListener sslListner;
        public static X509Certificate serverCertificate = null;
        Server()
        {
            serverCertificate = X509Certificate.CreateFromSignedFile(@"C:sslitinder.online.crt");
            sslListner = new TcpListener(IPAddress.Any, 443);
            sslListner.Start();
            Console.WriteLine("Starting server.." + serverCertificate.Subject + "n" + Assembly.GetExecutingAssembly().Location);
            while (ServerRunning)
            {
                TcpClient SslClient = sslListner.AcceptTcpClient();
                Thread SslThread = new Thread(new ParameterizedThreadStart(ClientThread));
                SslThread.Start(SslClient);
            }
            
        }
        static void ClientThread(Object StateInfo)
        {
            new Client((TcpClient)StateInfo);
        }

        ~Server()
        {
            if (sslListner != null)
            {
                sslListner.Stop();
            }
        }

        public static void Main(string[] args)
        {
            if (AppDomain.CurrentDomain.IsDefaultAppDomain())
            {
                Console.WriteLine("Switching another domain");
                new AppDomainSetup
                {
                    ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
                };
                var current = AppDomain.CurrentDomain;
                var strongNames = new StrongName[0];
                var domain = AppDomain.CreateDomain(
                    "ClearServer", null,
                    current.SetupInformation, new PermissionSet(PermissionState.Unrestricted),
                    strongNames);
                domain.ExecuteAssembly(Assembly.GetExecutingAssembly().Location);
            }
            new Server();
        }
    }
}

แƒแƒกแƒ”แƒ•แƒ” แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ ssl-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—:

using ClearServer.Core.Requester;
using System;
using System.Net.Security;
using System.Net.Sockets;

namespace ClearServer
{
    public class Client
    {
        public Client(TcpClient Client)
        {
            SslStream SSlClientStream = new SslStream(Client.GetStream(), false);
            try
            {
                SSlClientStream.AuthenticateAsServer(Server.serverCertificate, clientCertificateRequired: false, checkCertificateRevocation: true);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "---------------------------------------------------------------------n" +

quot;|{DateTime.Now:g}n|------------n|{Client.Client.RemoteEndPoint}n|------------n|Exception: {e.Message}n|------------n|Authentication failed - closing the connection.n" +
"---------------------------------------------------------------------n");
SSlClientStream.Close();
Client.Close();
}
new RequestContext(SSlClientStream, Client);
}

}
}


แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ”แƒฅแƒกแƒ™แƒšแƒฃแƒ–แƒ˜แƒฃแƒ แƒแƒ“ TCP แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ–แƒ”, แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒแƒ˜แƒชแƒœแƒแƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒก. แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”, แƒ แƒแƒ› แƒแƒฅ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜แƒ แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒงแƒแƒคแƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒ“, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ—แƒแƒœแƒแƒช แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก แƒ›แƒ˜แƒ•แƒชแƒ” แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜.

แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜

using ClearServer.Core.UserController;
using ReServer.Core.Classes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;

namespace ClearServer.Core.Requester
{
    public class RequestContext
    {
        public string Message = "";
        private readonly byte[] buffer = new byte[1024];
        public string RequestMethod;
        public string RequestUrl;
        public User RequestProfile;
        public User CurrentUser = null;
        public List<RequestValues> HeadersValues;
        public List<RequestValues> FormValues;
        private TcpClient TcpClient;

        private event Action<SslStream, RequestContext> OnRead = RequestHandler.OnHandle;

        DatabaseWorker databaseWorker = new DatabaseWorker();

        public RequestContext(SslStream ClientStream, TcpClient Client)
        {

            this.TcpClient = Client;
            try
            {
                ClientStream.BeginRead(buffer, 0, buffer.Length, ClientRead, ClientStream);
            }
            catch { return; }
        }
        private void ClientRead(IAsyncResult ar)
        {
            SslStream ClientStream = (SslStream)ar.AsyncState;

            if (ar.IsCompleted)
            {
                Message = Encoding.UTF8.GetString(buffer);
                Message = Uri.UnescapeDataString(Message);
                Console.WriteLine(

quot;n{DateTime.Now:g} Client IP:{TcpClient.Client.RemoteEndPoint}n{Message}");
RequestParse();
HeadersValues = HeaderValues();
FormValues = ContentValues();
UserParse();
ProfileParse();
OnRead?.Invoke(ClientStream, this);
}
}

private void RequestParse()
{
Match methodParse = Regex.Match(Message, @"(^w+)s+([^s?]+)[^s]*s+HTTP/.*|");
RequestMethod = methodParse.Groups[1].Value.Trim();
RequestUrl = methodParse.Groups[2].Value.Trim();
}
private void UserParse()
{
string cookie;
try
{
if (HeadersValues.Any(x => x.Name.Contains("Cookie")))
{
cookie = HeadersValues.FirstOrDefault(x => x.Name.Contains("Cookie")).Value;
try
{
CurrentUser = databaseWorker.CookieValidate(cookie);
}
catch { }
}
}
catch { }

}
private List<RequestValues> HeaderValues()
{
var values = new List<RequestValues>();
var parse = Regex.Matches(Message, @"(.*?): (.*?)n");
foreach (Match match in parse)
{
values.Add(new RequestValues()
{
Name = match.Groups[1].Value.Trim(),
Value = match.Groups[2].Value.Trim()
});
}
return values;
}

private void ProfileParse()
{
if (RequestUrl.Contains("@"))
{
RequestProfile = databaseWorker.FindUser(RequestUrl.Substring(2));
RequestUrl = "/profile";
}
}
private List<RequestValues> ContentValues()
{
var values = new List<RequestValues>();
var output = Message.Trim('n').Split().Last();
var parse = Regex.Matches(output, @"([^&].*?)=([^&]*b)");
foreach (Match match in parse)
{
values.Add(new RequestValues()
{
Name = match.Groups[1].Value.Trim(),
Value = match.Groups[2].Value.Trim().Replace('+', ' ')
});
}
return values;
}
}
}


แƒ›แƒ˜แƒกแƒ˜ แƒแƒ แƒกแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒก แƒ˜แƒ›แƒแƒจแƒ˜, แƒ แƒแƒ› แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒงแƒแƒคแƒ. แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒกแƒ’แƒแƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก, แƒ•แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒก แƒ“แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก url-แƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ— แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ— แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒจแƒ˜ HeaderName = Content แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒžแƒแƒฃแƒšแƒแƒ‘แƒ—, แƒแƒกแƒ”แƒ—แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒแƒœแƒ›แƒฎแƒšแƒ”แƒ‘ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, querystring), แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ— แƒ›แƒกแƒ’แƒแƒ•แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒจแƒ˜. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜ แƒแƒฆแƒ›แƒแƒแƒฉแƒ”แƒœแƒก, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก. แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒฐแƒ”แƒจแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒฅแƒฃแƒฅแƒ˜-แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒจแƒ˜, แƒ แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—แƒแƒช แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ แƒแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒกแƒฌแƒแƒ แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ.

แƒ˜แƒกแƒ”, แƒžแƒแƒขแƒแƒ แƒ, แƒšแƒแƒ›แƒแƒ–แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒ›แƒแƒ“แƒฃแƒšแƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒแƒ™แƒ”แƒ—แƒแƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ "site.com/@UserName" แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒแƒ“. แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜.

แƒ—แƒแƒ•แƒ˜ 3. แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒจแƒ”แƒ–แƒ”แƒ—แƒ•แƒ

แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒ˜ แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜ แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก, แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒ“แƒ แƒงแƒแƒคแƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก แƒแƒ  แƒœแƒแƒฌแƒ˜แƒšแƒแƒ“.

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜

using ClearServer.Core.UserController;
using System.Net.Security;
namespace ClearServer.Core.Requester
{
    public class RequestHandler
    {
        public static void OnHandle(SslStream ClientStream, RequestContext context)
        {

            if (context.CurrentUser != null)
            {
                new AuthUserController(ClientStream, context);
            }
            else 
            {
                new NonAuthUserController(ClientStream, context);
            };
        }
    }
}

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ.

แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ”แƒ‘แƒ˜
แƒ—แƒฃ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒœแƒฏแƒแƒ แƒแƒก. แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ”แƒ แƒ—แƒœแƒแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒฃแƒ‘แƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒก แƒ•แƒ”แƒ  แƒ•แƒฎแƒ”แƒ“แƒแƒ•.

แƒแƒ แƒแƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜

using ClearServer.Core.Requester;
using System.IO;
using System.Net.Security;

namespace ClearServer.Core.UserController
{
    internal class NonAuthUserController
    {
        private readonly SslStream ClientStream;
        private readonly RequestContext Context;
        private readonly WriteController WriteController;
        private readonly AuthorizationController AuthorizationController;

        private readonly string ViewPath = "C:/Users/drdre/source/repos/ClearServer/View";

        public NonAuthUserController(SslStream clientStream, RequestContext context)
        {
            this.ClientStream = clientStream;
            this.Context = context;
            this.WriteController = new WriteController(clientStream);
            this.AuthorizationController = new AuthorizationController(clientStream, context);
            ResourceLoad();
        }

        void ResourceLoad()
        {
            string[] blockextension = new string[] {"cshtml", "html", "htm"};
            bool block = false;
            foreach (var item in blockextension)
            {
                if (Context.RequestUrl.Contains(item))
                {
                    block = true;
                    break;
                }
            }
            string FilePath = "";
            string Header = "";
            var RazorController = new RazorController(Context, ClientStream);
            
            switch (Context.RequestMethod)
            {
                case "GET":
                    switch (Context.RequestUrl)
                    {
                        case "/":
                            FilePath = ViewPath + "/loginForm.html";
                            Header =

quot;HTTP/1.1 200 OKnContent-Type: text/html";
WriteController.DefaultWriter(Header, FilePath);
break;
case "/profile":
RazorController.ProfileLoader(ViewPath);
break;
default:
//ะฒ ะดะฐะฝะฝะพะผ ะฑะปะพะบะต ะบะพะดะฐ ะฟั€ะพะธัั…ะพะดะธั‚ ะพั‚ัะตั‡ะตะฝะธะต ะทะฐะฟั€ะพัะพะฒ ะบ ัะตั€ะฒะตั€ัƒ ะฟะพ ะฟั€ัะผะพะผัƒ ะฐะดั€ะตััƒ ัั‚ั€ะฐะฝะธั†ั‹ ะฒะธะดะฐ site.com/page.html
if (!File.Exists(ViewPath + Context.RequestUrl) | block)
{
RazorController.ErrorLoader(404);

}
else if (Path.HasExtension(Context.RequestUrl) && File.Exists(ViewPath + Context.RequestUrl))
{
Header = WriteController.ContentType(Context.RequestUrl);
FilePath = ViewPath + Context.RequestUrl;
WriteController.DefaultWriter(Header, FilePath);
}
break;
}
break;

case "POST":
AuthorizationController.MethodRecognizer();
break;

}

}

}
}


แƒ“แƒ แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ–แƒ” แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒแƒ–แƒ”.

WriterController

using System;
using System.IO;
using System.Net.Security;
using System.Text;

namespace ClearServer.Core.UserController
{
    public class WriteController
    {
        SslStream ClientStream;
        public WriteController(SslStream ClientStream)
        {
            this.ClientStream = ClientStream;
        }

        public void DefaultWriter(string Header, string FilePath)
        {
            FileStream fileStream;
            try
            {
                fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                Header =

quot;{Header}nContent-Length: {fileStream.Length}nn";
ClientStream.Write(Encoding.UTF8.GetBytes(Header));
byte[] response = new byte[fileStream.Length];
fileStream.BeginRead(response, 0, response.Length, OnFileRead, response);
}
catch { }
}

public string ContentType(string Uri)
{
string extension = Path.GetExtension(Uri);
string Header = "HTTP/1.1 200 OKnContent-Type:";
switch (extension)
{
case ".html":
case ".htm":
return

quot;{Header} text/html";
case ".css":
return

quot;{Header} text/css";
case ".js":
return

quot;{Header} text/javascript";
case ".jpg":
case ".jpeg":
case ".png":
case ".gif":
return

quot;{Header} image/{extension}";
default:
if (extension.Length > 1)
{
return

quot;{Header} application/" + extension.Substring(1);
}
else
{
return

quot;{Header} application/unknown";
}
}
}

public void OnFileRead(IAsyncResult ar)
{
if (ar.IsCompleted)
{
var file = (byte[])ar.AsyncState;
ClientStream.BeginWrite(file, 0, file.Length, OnClientSend, null);
}
}

public void OnClientSend(IAsyncResult ar)
{
if (ar.IsCompleted)
{
ClientStream.Close();
}
}
}


แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ›แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ’แƒแƒ›แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ RazorEngine, แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜. แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒชแƒฃแƒ“แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒแƒก.

RazorController

using ClearServer.Core.Requester;
using RazorEngine;
using RazorEngine.Templating;
using System;
using System.IO;
using System.Net;
using System.Net.Security;

namespace ClearServer.Core.UserController
{
    internal class RazorController
    {
        private RequestContext Context;
        private SslStream ClientStream;
        dynamic PageContent;


        public RazorController(RequestContext context, SslStream clientStream)
        {
            this.Context = context;
            this.ClientStream = clientStream;

        }

        public void ProfileLoader(string ViewPath)
        {
            string Filepath = ViewPath + "/profile.cshtml";
            if (Context.RequestProfile != null)
            {
                if (Context.CurrentUser != null && Context.RequestProfile.login == Context.CurrentUser.login)
                {
                    try
                    {
                        PageContent = new { isAuth = true, Name = Context.CurrentUser.name, Login = Context.CurrentUser.login, Skills = Context.CurrentUser.skills };
                        ClientSend(Filepath, Context.CurrentUser.login);
                    }
                    catch (Exception e) { Console.WriteLine(e); }

                }
                else
                {
                    try
                    {
                        PageContent = new { isAuth = false, Name = Context.RequestProfile.name, Login = Context.RequestProfile.login, Skills = Context.RequestProfile.skills };
                        ClientSend(Filepath, "PublicProfile:"+ Context.RequestProfile.login);
                    }
                    catch (Exception e) { Console.WriteLine(e); }
                }
            }
            else
            {
                ErrorLoader(404);
            }


        }

        public void ErrorLoader(int Code)
        {
            try
            {
                PageContent = new { ErrorCode = Code, Message = ((HttpStatusCode)Code).ToString() };
                string ErrorPage = "C:/Users/drdre/source/repos/ClearServer/View/Errors/ErrorPage.cshtml";
                ClientSend(ErrorPage, Code.ToString());
            }
            catch { }

        }

        private void ClientSend(string FilePath, string Key)
        {
            var template = File.ReadAllText(FilePath);
            var result = Engine.Razor.RunCompile(template, Key, null, (object)PageContent);
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(result);
            ClientStream.BeginWrite(buffer, 0, buffer.Length, OnClientSend, ClientStream);
        }

        private void OnClientSend(IAsyncResult ar)
        {
            if (ar.IsCompleted)
            {
                ClientStream.Close();
            }
        }
    }
}

แƒ“แƒ แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ› แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ. แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ. แƒกแƒแƒ˜แƒขแƒ–แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ“แƒ แƒกแƒแƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒฅแƒฃแƒฅแƒ˜-แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก.

แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜

using ClearServer.Core.Cookies;
using ClearServer.Core.Requester;
using ClearServer.Core.Security;
using System;
using System.Linq;
using System.Net.Security;
using System.Text;

namespace ClearServer.Core.UserController
{
    internal class AuthorizationController
    {
        private SslStream ClientStream;
        private RequestContext Context;
        private UserCookies cookies;
        private WriteController WriteController;
        DatabaseWorker DatabaseWorker;
        RazorController RazorController;
        PasswordHasher PasswordHasher;
        public AuthorizationController(SslStream clientStream, RequestContext context)
        {
            ClientStream = clientStream;
            Context = context;
            DatabaseWorker = new DatabaseWorker();
            WriteController = new WriteController(ClientStream);
            RazorController = new RazorController(context, clientStream);
            PasswordHasher = new PasswordHasher();
        }

        internal void MethodRecognizer()
        {
            if (Context.FormValues.Count == 2 && Context.FormValues.Any(x => x.Name == "password")) Authorize();
            else if (Context.FormValues.Count == 3 && Context.FormValues.Any(x => x.Name == "regPass")) Registration();
            else
            {
                RazorController.ErrorLoader(401);
            }
        }

        private void Authorize()
        {
            var values = Context.FormValues;
            var user = new User()
            {
                login = values[0].Value,
                password = PasswordHasher.PasswordHash(values[1].Value)
            };
            user = DatabaseWorker.UserAuth(user);
            if (user != null)
            {
                cookies = new UserCookies(user.login, user.password);
                user.cookie = cookies.AuthCookie;
                DatabaseWorker.UserUpdate(user);
                var response = Encoding.UTF8.GetBytes(

quot;HTTP/1.1 301 Moved PermanentlynLocation: /@{user.login}nSet-Cookie: {cookies.AuthCookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn");
ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);

}
else
{
RazorController.ErrorLoader(401);

}
}

private void Registration()
{
var values = Context.FormValues;
var user = new User()
{
name = values[0].Value,
login = values[1].Value,
password = PasswordHasher.PasswordHash(values[2].Value),
};
cookies = new UserCookies(user.login, user.password);
user.cookie = cookies.AuthCookie;
if (DatabaseWorker.LoginValidate(user.login))
{
Console.WriteLine("User ready");
Console.WriteLine(

quot;{user.password} {user.password.Trim().Length}");
DatabaseWorker.UserRegister(user);
var response = Encoding.UTF8.GetBytes(

quot;HTTP/1.1 301 Moved PermanentlynLocation: /@{user.login}nSet-Cookie: {user.cookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn");
ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);
}
else
{
RazorController.ErrorLoader(401);
}
}
}
}


แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

แฒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ

using ClearServer.Core.UserController;
using System;
using System.Data.Linq;
using System.Linq;

namespace ClearServer
{
    class DatabaseWorker
    {

        private readonly Table<User> users = null;
        private readonly DataContext DataBase = null;
        private const string connectionStr = @"ะฟัƒั‚ัŒะบะฑะฐะทะต";

        public DatabaseWorker()
        {
            DataBase = new DataContext(connectionStr);
            users = DataBase.GetTable<User>();
        }

        public User UserAuth(User User)
        {
            try
            {
                var user = users.SingleOrDefault(t => t.login.ToLower() == User.login.ToLower() && t.password == User.password);
                if (user != null)
                    return user;
                else
                    return null;
            }
            catch (Exception)
            {
                return null;
            }

        }

        public void UserRegister(User user)
        {
            try
            {
                users.InsertOnSubmit(user);
                DataBase.SubmitChanges();
                Console.WriteLine(

quot;User{user.name} with id {user.uid} added");
foreach (var item in users)
{
Console.WriteLine(item.login + "n");
}
}
catch (Exception e)
{
Console.WriteLine(e);
}

}

public bool LoginValidate(string login)
{
if (users.Any(x => x.login.ToLower() == login.ToLower()))
{
Console.WriteLine("Login already exists");
return false;
}
return true;
}
public void UserUpdate(User user)
{
var UserToUpdate = users.FirstOrDefault(x => x.uid == user.uid);
UserToUpdate = user;
DataBase.SubmitChanges();
Console.WriteLine(

quot;User {UserToUpdate.name} with id {UserToUpdate.uid} updated");
foreach (var item in users)
{
Console.WriteLine(item.login + "n");
}
}
public User CookieValidate(string CookieInput)
{
User user = null;
try
{
user = users.SingleOrDefault(x => x.cookie == CookieInput);
}
catch
{
return null;
}
if (user != null) return user;
else return null;
}
public User FindUser(string login)
{
User user = null;
try
{
user = users.Single(x => x.login.ToLower() == login.ToLower());
if (user != null)
{
return user;
}
else
{
return null;
}
}
catch (Exception)
{
return null;
}
}
}
}


แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒแƒ—แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜, แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒกแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ”แƒ‘แƒ˜, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒฃแƒ™แƒ•แƒ” แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ“แƒ แƒ“แƒ แƒแƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ•แƒแƒ”แƒ แƒ—แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ.

แƒ—แƒแƒ•แƒ˜ 4

แƒแƒ  แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒแƒ–แƒ” แƒแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ แƒแƒ›แƒ˜แƒก แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒจแƒ”แƒ›แƒ”แƒฅแƒ›แƒœแƒ แƒ™แƒ แƒแƒก-แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ Xamarin.Forms-แƒ–แƒ”. แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš, แƒ˜แƒ›แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒแƒ แƒ˜แƒก C#-แƒจแƒ˜. แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ”แƒ แƒ— แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒฌแƒแƒ•แƒ”แƒ“แƒ˜. แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒแƒ“, แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒ˜แƒก HttpClient-แƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒงแƒแƒ แƒ” แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” HttpRequestMessage, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ›แƒ˜แƒ“แƒแƒœ json แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜. แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒก แƒแƒ แƒแƒคแƒ แƒ˜แƒก แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ’แƒแƒ•แƒฎแƒกแƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜ แƒ“แƒ แƒ•แƒœแƒแƒฎแƒ” แƒ—แƒฎแƒแƒ•แƒœแƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒ—. แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒกแƒ˜แƒกแƒฃแƒšแƒ”แƒšแƒ”, แƒชแƒœแƒแƒ‘แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒช แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ แƒ‘แƒแƒšแƒ 3 แƒ™แƒ•แƒ˜แƒ แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒฆแƒšแƒ˜แƒšแƒ˜ แƒกแƒแƒฆแƒแƒ›แƒแƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜. แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒฌแƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒ” แƒจแƒ”แƒ•แƒ™แƒ แƒ˜แƒ‘แƒ” แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ HttpListner-แƒ–แƒ”. แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ›แƒแƒกแƒ–แƒ”, แƒ›แƒ” แƒ“แƒแƒ•แƒจแƒแƒšแƒ” แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒจแƒ˜, แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” KeyValuePair แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ“แƒแƒœ. แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ แƒแƒ  แƒฎแƒแƒ–แƒแƒ›แƒ“แƒ”.

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ”แƒก แƒแƒ“แƒ แƒ” แƒแƒ  แƒ˜แƒงแƒ แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฌแƒ˜แƒœแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ›แƒแƒ˜แƒœแƒช แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒ•แƒ”แƒ‘แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ–แƒ” แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒขแƒ˜. แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› Tcp-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜ แƒ“แƒแƒ›แƒ—แƒ แƒ’แƒฃแƒœแƒ•แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ, แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜ แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒงแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒฌแƒแƒ แƒแƒ“ แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ แƒแƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ แƒ”แƒกแƒžแƒแƒœแƒ“แƒ”แƒœแƒชแƒ˜แƒ˜แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ”แƒก แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒ“แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒแƒก RFC 6455 แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒจแƒ”แƒ›แƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ•แƒ”แƒ‘แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜. แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ˜แƒก แƒ’แƒแƒ›แƒ.

แƒฉแƒ”แƒ—แƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜

 private static async void HandleWebsocket(HttpListenerContext context)
        {
            var socketContext = await context.AcceptWebSocketAsync(null);
            var socket = socketContext.WebSocket;
            Locker.EnterWriteLock();
            try
            {
                Clients.Add(socket);
            }
            finally
            {
                Locker.ExitWriteLock();
            }

            while (true)
            {
                var buffer = new ArraySegment<byte>(new byte[1024]);
                var result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                var str = Encoding.Default.GetString(buffer);
                Console.WriteLine(str);

                for (int i = 0; i < Clients.Count; i++)
                {
                    WebSocket client = Clients[i];

                    try
                    {
                        if (client.State == WebSocketState.Open)
                        {
                            
                            await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                        }
                    }
                    catch (ObjectDisposedException)
                    {
                        Locker.EnterWriteLock();
                        try
                        {
                            Clients.Remove(client);
                            i--;
                        }
                        finally
                        {
                            Locker.ExitWriteLock();
                        }
                    }
                }
            }
        }

แƒ“แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ. แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ›แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ“แƒแƒแƒงแƒ”แƒœแƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜, แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜. แƒ›แƒ” แƒ™แƒ˜ แƒแƒ  แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒชแƒแƒšแƒ™แƒ” แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ ssl-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒแƒ แƒขแƒ–แƒ”.

แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก แƒ“แƒ แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก, แƒแƒ แƒ›แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ›แƒ แƒ’แƒแƒชแƒ•แƒแƒšแƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒงแƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒแƒ  แƒแƒ แƒ˜แƒก แƒฃแƒ–แƒแƒ แƒ›แƒแƒ–แƒแƒ แƒ˜ แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒœแƒ”แƒšแƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก, แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒ”แƒก แƒแƒ  แƒ˜แƒงแƒ แƒกแƒแƒญแƒ˜แƒ แƒ. แƒ แƒ”แƒแƒ’แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ 200 ms-แƒ“แƒแƒœ 40-30ms-แƒ›แƒ“แƒ” แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ. แƒ“แƒ แƒ›แƒ” แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜ แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ— แƒกแƒฌแƒแƒ  แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒแƒกแƒ˜แƒžแƒ”แƒ“แƒ˜แƒก แƒแƒœ แƒ™แƒšแƒ˜แƒ”แƒœแƒข-แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ C# .Net แƒฉแƒแƒ แƒฉแƒแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜

แƒ’แƒแƒ“แƒแƒงแƒแƒ แƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ Tcp-แƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ Http-แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ. แƒแƒฎแƒšแƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ แƒ”แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒ”แƒขแƒแƒžแƒ–แƒ”แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒแƒฅแƒ•แƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ, แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒแƒ  แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— html แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ.

แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒก

"แƒคแƒแƒ แƒ“แƒก แƒ แƒแƒ› แƒแƒ  แƒ˜แƒชแƒœแƒแƒ‘, แƒ—แƒแƒ•แƒ˜ แƒฌแƒงแƒแƒšแƒจแƒ˜ แƒแƒ  แƒฉแƒแƒ˜แƒ“แƒ”" แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒฃแƒคแƒ แƒ แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒฉแƒแƒ•แƒฃแƒฆแƒ แƒ›แƒแƒ•แƒ“แƒ” แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ–แƒ” แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒแƒก. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒก แƒฃแƒแƒฎแƒšแƒแƒ•แƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ“แƒแƒ•แƒ‘แƒ แƒฃแƒœแƒ“แƒ” แƒ“แƒ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒคแƒฃแƒญแƒ” แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ แƒแƒ› แƒ˜แƒกแƒ”แƒ•. แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ› แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ” แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ‘แƒ”แƒ•แƒ แƒ˜แƒ แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒ˜. แƒ—แƒฃ แƒแƒฅแƒแƒ›แƒ“แƒ” แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ—, แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒ แƒแƒ› แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ—.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ๐Ÿ”ฅ แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒ—, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ | ProHoster