{"id":93307,"date":"2020-09-05T07:43:05","date_gmt":"2020-09-05T05:43:05","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework"},"modified":"2021-01-02T13:05:02","modified_gmt":"2021-01-02T11:05:02","slug":"prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework","title":{"rendered":"Fortgeschrittene Fahrradkonstruktion oder client-server Anwendung basierend auf dem C# .Net Framework","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0442\u044c \u0447\u0435\u043c \u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0438\u043d\u0434\u0435\u0440\u0430, \u043d\u043e \u0434\u043b\u044f IT \u0442\u0443\u0441\u043e\u0432\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0448\u044c\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0448\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0443\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>\u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0435\u0431\u0435, \u0447\u0442\u043e \u0431\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0448\u0430\u0433\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0410\u0440\u0442\u0438\u0441\u0442\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0442\u0443\u0434\u0438\u0438, \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 C# \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f Unity \u0438 \u0432 \u0434\u043e\u0432\u0435\u0441\u043e\u043a \u043a \u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u043d\u0434\u0440\u043e\u0438\u0434 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u043c\u0438. \u0417\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044d\u0442\u043e\u0433\u043e \u043c\u0438\u0440\u043a\u0430 \u044f \u0435\u0449\u0451 \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0438 \u0442\u0443\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p><\/blockquote>\n<h3>\u0427\u0430\u0441\u0442\u044c 1. \u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u043c\u044b<\/h3>\n<p>\u0420\u0435\u0448\u0438\u0432, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u044f \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043a\u0430\u043a \u0441\u043e\u0432\u0443 \u043d\u0430 \u0433\u043b\u043e\u0431\u0443\u0441, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u0448\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043d\u0430 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0440\u0438\u0446\u0430\u043d\u0438\u0435.<br \/>\n\u041d\u043e \u044d\u0442\u043e \u0436\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0447\u0435\u043b\u0435\u043d\u0434\u0436\u0430 \u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u044d\u0442\u043e\u043c \u044f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b, \u0430 \u043f\u043e\u0441\u0435\u043c\u0443 \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0432\u0435\u0431 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c\u0438.<\/p>\n<p>\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b \u0441 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e C# .Net. \u0422\u0443\u0442 \u044f \u043d\u0430\u0448\u0451\u043b \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u0435\u0442\u044c\u044e, \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 ASP.Net \u0438\u043b\u0438 \u0441\u043b\u0443\u0436\u0431 Azure, \u0434\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 TcpHttp \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441 ASP \u044f \u0435\u0433\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0442\u043c\u0451\u043b, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u044f\u0436\u0451\u043b\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u043f\u043e\u0438\u0441\u043a\u0438. \u0412\u044b\u0431\u043e\u0440 \u0432\u0441\u0442\u0430\u043b \u043c\u0435\u0436\u0434\u0443 TCP \u0438 Http \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u0417\u0434\u0435\u0441\u044c \u0436\u0435, \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/120157\/\">\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<\/a><\/noindex>, \u0441\u043e\u0431\u0440\u0430\u0432 \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 TCP \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e http \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043d\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043e\u0442\u0434\u0430\u0432\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u044f \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0418 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0430\u0439\u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0430\u043d\u0434\u0440\u043e\u0438\u0434\u0435 \u0438 ios.<\/p>\n<p><b class=\"spoiler_title\">\u0417\u0434\u0435\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/b><br \/>\n\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cs\">using System;\nusing System.Net.Sockets;\nusing System.Net;\nusing System.Threading;\n\nnamespace ClearServer\n{\n\n    class Server\n    {\n        TcpListener Listener;\n        public Server(int Port)\n        {\n            Listener = new TcpListener(IPAddress.Any, Port);\n            Listener.Start();\n\n            while (true)\n            {\n                TcpClient Client = Listener.AcceptTcpClient();\n                Thread Thread = new Thread(new ParameterizedThreadStart(ClientThread));\n                Thread.Start(Client);\n            }\n        }\n\n        static void ClientThread(Object StateInfo)\n        {\n            new Client((TcpClient)StateInfo);\n        }\n\n        ~Server()\n        {\n            if (Listener != null)\n            {\n                Listener.Stop();\n            }\n        }\n\n        static void Main(string[] args)\n        {\n            DatabaseWorker sqlBase = DatabaseWorker.GetInstance;\n\n            new Server(80);\n        }\n    }\n}<\/code><\/pre>\n<p>\u0421\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cs\">using System;\nusing System.IO;\nusing System.Net.Sockets;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace ClearServer\n{\n    class Client\n    {\n\n\n        public Client(TcpClient Client)\n        {\n\n            string Message = \"\";\n            byte[] Buffer = new byte[1024];\n            int Count;\n            while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) &gt; 0)\n            {\n                Message += Encoding.UTF8.GetString(Buffer, 0, Count);\n\n                if (Message.IndexOf(\"rnrn\") &gt;= 0 || Message.Length &gt; 4096)\n                {\n                    Console.WriteLine(Message);\n                    break;\n                }\n            }\n\n            Match ReqMatch = Regex.Match(Message, @\"^w+s+([^s?]+)[^s]*s+HTTP\/.*|\");\n            if (ReqMatch == Match.Empty)\n            {\n                ErrorWorker.SendError(Client, 400);\n                return;\n            }\n            string RequestUri = ReqMatch.Groups[1].Value;\n            RequestUri = Uri.UnescapeDataString(RequestUri);\n            if (RequestUri.IndexOf(\"..\") &gt;= 0)\n            {\n                ErrorWorker.SendError(Client, 400);\n                return;\n            }\n            if (RequestUri.EndsWith(\"\/\"))\n            {\n                RequestUri += \"index.html\";\n            }\n\n            string FilePath =\n<pre wp-pre-tag-1=\"\"><\/pre>\n<p>quot;D:\/Web\/TestSite{RequestUri}\";<\/p>\n<p>            if (!File.Exists(FilePath))<br \/>\n            {<br \/>\n                ErrorWorker.SendError(Client, 404);<br \/>\n                return;<br \/>\n            }<\/p>\n<p>            string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.'));<\/p>\n<p>            string ContentType = \"\";<\/p>\n<p>            switch (Extension)<br \/>\n            {<br \/>\n                case \".htm\":<br \/>\n                case \".html\":<br \/>\n                    ContentType = \"text\/html\";<br \/>\n                    break;<br \/>\n                case \".css\":<br \/>\n                    ContentType = \"text\/css\";<br \/>\n                    break;<br \/>\n                case \".js\":<br \/>\n                    ContentType = \"text\/javascript\";<br \/>\n                    break;<br \/>\n                case \".jpg\":<br \/>\n                    ContentType = \"image\/jpeg\";<br \/>\n                    break;<br \/>\n                case \".jpeg\":<br \/>\n                case \".png\":<br \/>\n                case \".gif\":<br \/>\n                    ContentType =<\/p>\n<pre wp-pre-tag-1=\"\"><\/pre>\n<p>quot;image\/{Extension.Substring(1)}\";<br \/>\n                    break;<br \/>\n                default:<br \/>\n                    if (Extension.Length &gt; 1)<br \/>\n                    {<br \/>\n                        ContentType =<\/p>\n<pre wp-pre-tag-1=\"\"><\/pre>\n<p>quot;application\/{Extension.Substring(1)}\";<br \/>\n                    }<br \/>\n                    else<br \/>\n                    {<br \/>\n                        ContentType = \"application\/unknown\";<br \/>\n                    }<br \/>\n                    break;<br \/>\n            }<\/p>\n<p>            FileStream FS;<br \/>\n            try<br \/>\n            {<br \/>\n                FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);<br \/>\n            }<br \/>\n            catch (Exception)<br \/>\n            {<br \/>\n                ErrorWorker.SendError(Client, 500);<br \/>\n                return;<br \/>\n            }<\/p>\n<p>            string Headers =<\/p>\n<pre wp-pre-tag-1=\"\"><\/pre>\n<p>quot;HTTP\/1.1 200 OKnContent-Type: {ContentType}nContent-Length: {FS.Length}nn\";<br \/>\n            byte[] HeadersBuffer = Encoding.ASCII.GetBytes(Headers);<br \/>\n            Client.GetStream().Write(HeadersBuffer, 0, HeadersBuffer.Length);<\/p>\n<p>            while (FS.Position &lt; FS.Length)<br \/>\n            {<br \/>\n                Count = FS.Read(Buffer, 0, Buffer.Length);<br \/>\n                Client.GetStream().Write(Buffer, 0, Count);<br \/>\n            }<\/p>\n<p>            FS.Close();<br \/>\n            Client.Close();<br \/>\n        }<br \/>\n    }<br \/>\n}<\/code><br \/>\n\u0418 \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043d\u0430 local SQL:<\/p>\n<pre><code class=\"cs\">using System;\nusing System.Data.Linq;\nnamespace ClearServer\n{\n    class DatabaseWorker\n    {\n\n        private static DatabaseWorker instance;\n\n        public static DatabaseWorker GetInstance\n        {\n            get\n            {\n                if (instance == null)\n                    instance = new DatabaseWorker();\n                return instance;\n            }\n        }\n\n\n        private DatabaseWorker()\n        {\n            string connectionStr = databasePath;\n            using (DataContext db = new DataContext(connectionStr))\n            {\n                Table&lt;User&gt; users = db.GetTable&lt;User&gt;();\n                foreach (var item in users)\n                {\n                    Console.WriteLine(\n<pre wp-pre-tag-2=\"\"><\/pre>\n<p>quot;{item.login} {item.password}\");<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n}<\/code><br \/>\n\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u044d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u0430\u043b\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0431\u044b\u043b\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e \u0441\u0443\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a\u0441\u0442\u0430\u0442\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f).<\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 2. \u041f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u0451\u0441<\/h3>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c(<i>\u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u043d\u0435\u0442<\/i>), \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<br \/>\n\u0428\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u0441\u044f. \u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0437\u0430\u0432\u0451\u043b\u0441\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0438 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ssl-sertifikat\"   title=\"ssl\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2282\">ssl<\/a> \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p><b class=\"spoiler_title\">\u0415\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/b><br \/>\n\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0432 \u0441\u0435\u0431\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430.<\/p>\n<pre><code class=\"cs\">using System;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Reflection;\nusing System.Security;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Security.Permissions;\nusing System.Security.Policy;\nusing System.Threading;\n\n\nnamespace ClearServer\n{\n\n    sealed class Server\n    {\n        readonly bool ServerRunning = true;\n        readonly TcpListener sslListner;\n        public static X509Certificate serverCertificate = null;\n        Server()\n        {\n            serverCertificate = X509Certificate.CreateFromSignedFile(@\"C:sslitinder.online.crt\");\n            sslListner = new TcpListener(IPAddress.Any, 443);\n            sslListner.Start();\n            Console.WriteLine(\"Starting server..\" + serverCertificate.Subject + \"n\" + Assembly.GetExecutingAssembly().Location);\n            while (ServerRunning)\n            {\n                TcpClient SslClient = sslListner.AcceptTcpClient();\n                Thread SslThread = new Thread(new ParameterizedThreadStart(ClientThread));\n                SslThread.Start(SslClient);\n            }\n            \n        }\n        static void ClientThread(Object StateInfo)\n        {\n            new Client((TcpClient)StateInfo);\n        }\n\n        ~Server()\n        {\n            if (sslListner != null)\n            {\n                sslListner.Stop();\n            }\n        }\n\n        public static void Main(string[] args)\n        {\n            if (AppDomain.CurrentDomain.IsDefaultAppDomain())\n            {\n                Console.WriteLine(\"Switching another domain\");\n                new AppDomainSetup\n                {\n                    ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase\n                };\n                var current = AppDomain.CurrentDomain;\n                var strongNames = new StrongName[0];\n                var domain = AppDomain.CreateDomain(\n                    \"ClearServer\", null,\n                    current.SetupInformation, new PermissionSet(PermissionState.Unrestricted),\n                    strongNames);\n                domain.ExecuteAssembly(Assembly.GetExecutingAssembly().Location);\n            }\n            new Server();\n        }\n    }\n}<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a \u0436\u0435 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u043e ssl:<\/p>\n<pre><code class=\"cs\">using ClearServer.Core.Requester;\nusing System;\nusing System.Net.Security;\nusing System.Net.Sockets;\n\nnamespace ClearServer\n{\n    public class Client\n    {\n        public Client(TcpClient Client)\n        {\n            SslStream SSlClientStream = new SslStream(Client.GetStream(), false);\n            try\n            {\n                SSlClientStream.AuthenticateAsServer(Server.serverCertificate, clientCertificateRequired: false, checkCertificateRevocation: true);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(\n                    \"---------------------------------------------------------------------n\" +\n\n<pre wp-pre-tag-4=\"\"><\/pre>\n<p>quot;|{DateTime.Now:g}n|------------n|{Client.Client.RemoteEndPoint}n|------------n|Exception: {e.Message}n|------------n|Authentication failed - closing the connection.n\" +<br \/>\n                    \"---------------------------------------------------------------------n\");<br \/>\n                SSlClientStream.Close();<br \/>\n                Client.Close();<br \/>\n            }<br \/>\n            new RequestContext(SSlClientStream, Client);<br \/>\n        }<\/p>\n<p>    }<br \/>\n}<br \/>\n<\/code><br \/>\n\u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 TCP \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u042f \u0440\u0435\u0448\u0438\u043b \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043f\u0430\u0440\u0441\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0441\u043c\u043e\u0433\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u044b \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<p><b class=\"spoiler_title\">\u041f\u0430\u0440\u0441\u0435\u0440<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.UserController;\nusing ReServer.Core.Classes;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Security;\nusing System.Net.Sockets;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace ClearServer.Core.Requester\n{\n    public class RequestContext\n    {\n        public string Message = \"\";\n        private readonly byte[] buffer = new byte[1024];\n        public string RequestMethod;\n        public string RequestUrl;\n        public User RequestProfile;\n        public User CurrentUser = null;\n        public List&lt;RequestValues&gt; HeadersValues;\n        public List&lt;RequestValues&gt; FormValues;\n        private TcpClient TcpClient;\n\n        private event Action&lt;SslStream, RequestContext&gt; OnRead = RequestHandler.OnHandle;\n\n        DatabaseWorker databaseWorker = new DatabaseWorker();\n\n        public RequestContext(SslStream ClientStream, TcpClient Client)\n        {\n\n            this.TcpClient = Client;\n            try\n            {\n                ClientStream.BeginRead(buffer, 0, buffer.Length, ClientRead, ClientStream);\n            }\n            catch { return; }\n        }\n        private void ClientRead(IAsyncResult ar)\n        {\n            SslStream ClientStream = (SslStream)ar.AsyncState;\n\n            if (ar.IsCompleted)\n            {\n                Message = Encoding.UTF8.GetString(buffer);\n                Message = Uri.UnescapeDataString(Message);\n                Console.WriteLine(\n<pre wp-pre-tag-5=\"\"><\/pre>\n<p>quot;n{DateTime.Now:g} Client IP:{TcpClient.Client.RemoteEndPoint}n{Message}\");<br \/>\n                RequestParse();<br \/>\n                HeadersValues = HeaderValues();<br \/>\n                FormValues = ContentValues();<br \/>\n                UserParse();<br \/>\n                ProfileParse();<br \/>\n                OnRead?.Invoke(ClientStream, this);<br \/>\n            }<br \/>\n        }<\/p>\n<p>        private void RequestParse()<br \/>\n        {<br \/>\n            Match methodParse = Regex.Match(Message, @\"(^w+)s+([^s?]+)[^s]*s+HTTP\/.*|\");<br \/>\n            RequestMethod = methodParse.Groups[1].Value.Trim();<br \/>\n            RequestUrl = methodParse.Groups[2].Value.Trim();<br \/>\n        }<br \/>\n        private void UserParse()<br \/>\n        {<br \/>\n            string cookie;<br \/>\n            try<br \/>\n            {<br \/>\n                if (HeadersValues.Any(x =&gt; x.Name.Contains(\"Cookie\")))<br \/>\n                {<br \/>\n                    cookie = HeadersValues.FirstOrDefault(x =&gt; x.Name.Contains(\"Cookie\")).Value;<br \/>\n                    try<br \/>\n                    {<br \/>\n                        CurrentUser = databaseWorker.CookieValidate(cookie);<br \/>\n                    }<br \/>\n                    catch { }<br \/>\n                }<br \/>\n            }<br \/>\n            catch { }<\/p>\n<p>        }<br \/>\n        private List&lt;RequestValues&gt; HeaderValues()<br \/>\n        {<br \/>\n            var values = new List&lt;RequestValues&gt;();<br \/>\n            var parse = Regex.Matches(Message, @\"(.*?): (.*?)n\");<br \/>\n            foreach (Match match in parse)<br \/>\n            {<br \/>\n                values.Add(new RequestValues()<br \/>\n                {<br \/>\n                    Name = match.Groups[1].Value.Trim(),<br \/>\n                    Value = match.Groups[2].Value.Trim()<br \/>\n                });<br \/>\n            }<br \/>\n            return values;<br \/>\n        }<\/p>\n<p>        private void ProfileParse()<br \/>\n        {<br \/>\n            if (RequestUrl.Contains(\"@\"))<br \/>\n            {<br \/>\n                RequestProfile = databaseWorker.FindUser(RequestUrl.Substring(2));<br \/>\n                RequestUrl = \"\/profile\";<br \/>\n            }<br \/>\n        }<br \/>\n        private List&lt;RequestValues&gt; ContentValues()<br \/>\n        {<br \/>\n            var values = new List&lt;RequestValues&gt;();<br \/>\n            var output = Message.Trim('n').Split().Last();<br \/>\n            var parse = Regex.Matches(output, @\"([^&amp;].*?)=([^&amp;]*b)\");<br \/>\n            foreach (Match match in parse)<br \/>\n            {<br \/>\n                values.Add(new RequestValues()<br \/>\n                {<br \/>\n                    Name = match.Groups[1].Value.Trim(),<br \/>\n                    Value = match.Groups[2].Value.Trim().Replace('+', ' ')<br \/>\n                });<br \/>\n            }<br \/>\n            return values;<br \/>\n        }<br \/>\n    }<br \/>\n}<\/code><br \/>\n\u0421\u0443\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0438 url \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0417\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u043e\u043d\u044f\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0438\u0434\u0430 \u0418\u043c\u044f\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043c, \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 querystring) \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u0433\u043e\u043d\u044f\u0435\u043c \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0445\u044d\u0448 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043a\u0443\u043a\u0430\u0445, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<p>\u041d\u0443 \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u0444\u0438\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0438\u0434\u0430 \u00absite.com\/@UserName\u00bb \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 3. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0443\u043b\u044f, \u0441\u043c\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u0438<\/h3>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043e\u0442\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p><b class=\"spoiler_title\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.UserController;\nusing System.Net.Security;\nnamespace ClearServer.Core.Requester\n{\n    public class RequestHandler\n    {\n        public static void OnHandle(SslStream ClientStream, RequestContext context)\n        {\n\n            if (context.CurrentUser != null)\n            {\n                new AuthUserController(ClientStream, context);\n            }\n            else \n            {\n                new NonAuthUserController(ClientStream, context);\n            };\n        }\n    }\n}<\/code><\/pre>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u044e\u0437\u0435\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p><b class=\"spoiler_title\">\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/b><br \/>\n\u0415\u0441\u043b\u0438 \u044e\u0437\u0435\u0440 \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d, \u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043e\u043a\u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041a\u043e\u0434 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0435\u0433\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><b class=\"spoiler_title\">\u041d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.Requester;\nusing System.IO;\nusing System.Net.Security;\n\nnamespace ClearServer.Core.UserController\n{\n    internal class NonAuthUserController\n    {\n        private readonly SslStream ClientStream;\n        private readonly RequestContext Context;\n        private readonly WriteController WriteController;\n        private readonly AuthorizationController AuthorizationController;\n\n        private readonly string ViewPath = \"C:\/Users\/drdre\/source\/repos\/ClearServer\/View\";\n\n        public NonAuthUserController(SslStream clientStream, RequestContext context)\n        {\n            this.ClientStream = clientStream;\n            this.Context = context;\n            this.WriteController = new WriteController(clientStream);\n            this.AuthorizationController = new AuthorizationController(clientStream, context);\n            ResourceLoad();\n        }\n\n        void ResourceLoad()\n        {\n            string[] blockextension = new string[] {\"cshtml\", \"html\", \"htm\"};\n            bool block = false;\n            foreach (var item in blockextension)\n            {\n                if (Context.RequestUrl.Contains(item))\n                {\n                    block = true;\n                    break;\n                }\n            }\n            string FilePath = \"\";\n            string Header = \"\";\n            var RazorController = new RazorController(Context, ClientStream);\n            \n            switch (Context.RequestMethod)\n            {\n                case \"GET\":\n                    switch (Context.RequestUrl)\n                    {\n                        case \"\/\":\n                            FilePath = ViewPath + \"\/loginForm.html\";\n                            Header =\n<pre wp-pre-tag-7=\"\"><\/pre>\n<p>quot;HTTP\/1.1 200 OKnContent-Type: text\/html\";<br \/>\n                            WriteController.DefaultWriter(Header, FilePath);<br \/>\n                            break;<br \/>\n                        case \"\/profile\":<br \/>\n                            RazorController.ProfileLoader(ViewPath);<br \/>\n                            break;<br \/>\n                        default:<br \/>\n\/\/\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0438\u0434\u0430 site.com\/page.html<br \/>\n                            if (!File.Exists(ViewPath + Context.RequestUrl) | block)<br \/>\n                            {<br \/>\n                                RazorController.ErrorLoader(404);<\/p>\n<p>                            }<br \/>\n                            else if (Path.HasExtension(Context.RequestUrl) &amp;&amp; File.Exists(ViewPath + Context.RequestUrl))<br \/>\n                            {<br \/>\n                                Header = WriteController.ContentType(Context.RequestUrl);<br \/>\n                                FilePath = ViewPath + Context.RequestUrl;<br \/>\n                                WriteController.DefaultWriter(Header, FilePath);<br \/>\n                            }<br \/>\n                            break;<br \/>\n                    }<br \/>\n                    break;<\/p>\n<p>                case \"POST\":<br \/>\n                    AuthorizationController.MethodRecognizer();<br \/>\n                    break;<\/p>\n<p>            }<\/p>\n<p>        }<\/p>\n<p>    }<br \/>\n}<br \/>\n<\/code><br \/>\n\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p><b class=\"spoiler_title\">WriterController<\/b><\/p>\n<pre><code class=\"cs\">using System;\nusing System.IO;\nusing System.Net.Security;\nusing System.Text;\n\nnamespace ClearServer.Core.UserController\n{\n    public class WriteController\n    {\n        SslStream ClientStream;\n        public WriteController(SslStream ClientStream)\n        {\n            this.ClientStream = ClientStream;\n        }\n\n        public void DefaultWriter(string Header, string FilePath)\n        {\n            FileStream fileStream;\n            try\n            {\n                fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);\n                Header =\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header}nContent-Length: {fileStream.Length}nn\";<br \/>\n                ClientStream.Write(Encoding.UTF8.GetBytes(Header));<br \/>\n                byte[] response = new byte[fileStream.Length];<br \/>\n                fileStream.BeginRead(response, 0, response.Length, OnFileRead, response);<br \/>\n            }<br \/>\n            catch { }<br \/>\n        }<\/p>\n<p>        public string ContentType(string Uri)<br \/>\n        {<br \/>\n            string extension = Path.GetExtension(Uri);<br \/>\n            string Header = \"HTTP\/1.1 200 OKnContent-Type:\";<br \/>\n            switch (extension)<br \/>\n            {<br \/>\n                case \".html\":<br \/>\n                case \".htm\":<br \/>\n                    return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} text\/html\";<br \/>\n                case \".css\":<br \/>\n                    return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} text\/css\";<br \/>\n                case \".js\":<br \/>\n                    return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} text\/javascript\";<br \/>\n                case \".jpg\":<br \/>\n                case \".jpeg\":<br \/>\n                case \".png\":<br \/>\n                case \".gif\":<br \/>\n                    return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} image\/{extension}\";<br \/>\n                default:<br \/>\n                    if (extension.Length &gt; 1)<br \/>\n                    {<br \/>\n                        return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} application\/\" + extension.Substring(1);<br \/>\n                    }<br \/>\n                    else<br \/>\n                    {<br \/>\n                        return<\/p>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<p>quot;{Header} application\/unknown\";<br \/>\n                    }<br \/>\n            }<br \/>\n        }<\/p>\n<p>        public void OnFileRead(IAsyncResult ar)<br \/>\n        {<br \/>\n            if (ar.IsCompleted)<br \/>\n            {<br \/>\n                var file = (byte[])ar.AsyncState;<br \/>\n                ClientStream.BeginWrite(file, 0, file.Length, OnClientSend, null);<br \/>\n            }<br \/>\n        }<\/p>\n<p>        public void OnClientSend(IAsyncResult ar)<br \/>\n        {<br \/>\n            if (ar.IsCompleted)<br \/>\n            {<br \/>\n                ClientStream.Close();<br \/>\n            }<br \/>\n        }<br \/>\n    }<\/code><br \/>\n\u041d\u043e \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c RazorEngine, \u0432\u0435\u0440\u043d\u0435\u0435 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c. \u041e\u043d \u0442\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0432\u044b\u0434\u0430\u0447\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><b class=\"spoiler_title\">RazorController<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.Requester;\nusing RazorEngine;\nusing RazorEngine.Templating;\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Net.Security;\n\nnamespace ClearServer.Core.UserController\n{\n    internal class RazorController\n    {\n        private RequestContext Context;\n        private SslStream ClientStream;\n        dynamic PageContent;\n\n\n        public RazorController(RequestContext context, SslStream clientStream)\n        {\n            this.Context = context;\n            this.ClientStream = clientStream;\n\n        }\n\n        public void ProfileLoader(string ViewPath)\n        {\n            string Filepath = ViewPath + \"\/profile.cshtml\";\n            if (Context.RequestProfile != null)\n            {\n                if (Context.CurrentUser != null &amp;&amp; Context.RequestProfile.login == Context.CurrentUser.login)\n                {\n                    try\n                    {\n                        PageContent = new { isAuth = true, Name = Context.CurrentUser.name, Login = Context.CurrentUser.login, Skills = Context.CurrentUser.skills };\n                        ClientSend(Filepath, Context.CurrentUser.login);\n                    }\n                    catch (Exception e) { Console.WriteLine(e); }\n\n                }\n                else\n                {\n                    try\n                    {\n                        PageContent = new { isAuth = false, Name = Context.RequestProfile.name, Login = Context.RequestProfile.login, Skills = Context.RequestProfile.skills };\n                        ClientSend(Filepath, \"PublicProfile:\"+ Context.RequestProfile.login);\n                    }\n                    catch (Exception e) { Console.WriteLine(e); }\n                }\n            }\n            else\n            {\n                ErrorLoader(404);\n            }\n\n\n        }\n\n        public void ErrorLoader(int Code)\n        {\n            try\n            {\n                PageContent = new { ErrorCode = Code, Message = ((HttpStatusCode)Code).ToString() };\n                string ErrorPage = \"C:\/Users\/drdre\/source\/repos\/ClearServer\/View\/Errors\/ErrorPage.cshtml\";\n                ClientSend(ErrorPage, Code.ToString());\n            }\n            catch { }\n\n        }\n\n        private void ClientSend(string FilePath, string Key)\n        {\n            var template = File.ReadAllText(FilePath);\n            var result = Engine.Razor.RunCompile(template, Key, null, (object)PageContent);\n            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(result);\n            ClientStream.BeginWrite(buffer, 0, buffer.Length, OnClientSend, ClientStream);\n        }\n\n        private void OnClientSend(IAsyncResult ar)\n        {\n            if (ar.IsCompleted)\n            {\n                ClientStream.Close();\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0443\u0436\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f. \u041c\u043e\u0434\u0443\u043b\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u043e\u0440\u043c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u044e\u0437\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0437\u0430\u043c\u0435\u043d \u043a\u0443\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443.<\/p>\n<p><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.Cookies;\nusing ClearServer.Core.Requester;\nusing ClearServer.Core.Security;\nusing System;\nusing System.Linq;\nusing System.Net.Security;\nusing System.Text;\n\nnamespace ClearServer.Core.UserController\n{\n    internal class AuthorizationController\n    {\n        private SslStream ClientStream;\n        private RequestContext Context;\n        private UserCookies cookies;\n        private WriteController WriteController;\n        DatabaseWorker DatabaseWorker;\n        RazorController RazorController;\n        PasswordHasher PasswordHasher;\n        public AuthorizationController(SslStream clientStream, RequestContext context)\n        {\n            ClientStream = clientStream;\n            Context = context;\n            DatabaseWorker = new DatabaseWorker();\n            WriteController = new WriteController(ClientStream);\n            RazorController = new RazorController(context, clientStream);\n            PasswordHasher = new PasswordHasher();\n        }\n\n        internal void MethodRecognizer()\n        {\n            if (Context.FormValues.Count == 2 &amp;&amp; Context.FormValues.Any(x =&gt; x.Name == \"password\")) Authorize();\n            else if (Context.FormValues.Count == 3 &amp;&amp; Context.FormValues.Any(x =&gt; x.Name == \"regPass\")) Registration();\n            else\n            {\n                RazorController.ErrorLoader(401);\n            }\n        }\n\n        private void Authorize()\n        {\n            var values = Context.FormValues;\n            var user = new User()\n            {\n                login = values[0].Value,\n                password = PasswordHasher.PasswordHash(values[1].Value)\n            };\n            user = DatabaseWorker.UserAuth(user);\n            if (user != null)\n            {\n                cookies = new UserCookies(user.login, user.password);\n                user.cookie = cookies.AuthCookie;\n                DatabaseWorker.UserUpdate(user);\n                var response = Encoding.UTF8.GetBytes(\n<pre wp-pre-tag-10=\"\"><\/pre>\n<p>quot;HTTP\/1.1 301 Moved PermanentlynLocation: \/@{user.login}nSet-Cookie: {cookies.AuthCookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn\");<br \/>\n                ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);<\/p>\n<p>            }<br \/>\n            else<br \/>\n            {<br \/>\n                RazorController.ErrorLoader(401);<\/p>\n<p>            }<br \/>\n        }<\/p>\n<p>        private void Registration()<br \/>\n        {<br \/>\n            var values = Context.FormValues;<br \/>\n            var user = new User()<br \/>\n            {<br \/>\n                name = values[0].Value,<br \/>\n                login = values[1].Value,<br \/>\n                password = PasswordHasher.PasswordHash(values[2].Value),<br \/>\n            };<br \/>\n            cookies = new UserCookies(user.login, user.password);<br \/>\n            user.cookie = cookies.AuthCookie;<br \/>\n            if (DatabaseWorker.LoginValidate(user.login))<br \/>\n            {<br \/>\n                Console.WriteLine(\"User ready\");<br \/>\n                Console.WriteLine(<\/p>\n<pre wp-pre-tag-10=\"\"><\/pre>\n<p>quot;{user.password} {user.password.Trim().Length}\");<br \/>\n                DatabaseWorker.UserRegister(user);<br \/>\n                var response = Encoding.UTF8.GetBytes(<\/p>\n<pre wp-pre-tag-10=\"\"><\/pre>\n<p>quot;HTTP\/1.1 301 Moved PermanentlynLocation: \/@{user.login}nSet-Cookie: {user.cookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn\");<br \/>\n                ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);<br \/>\n            }<br \/>\n            else<br \/>\n            {<br \/>\n                RazorController.ErrorLoader(401);<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/code><br \/>\n\u0410 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p><b class=\"spoiler_title\">\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<pre><code class=\"cs\">using ClearServer.Core.UserController;\nusing System;\nusing System.Data.Linq;\nusing System.Linq;\n\nnamespace ClearServer\n{\n    class DatabaseWorker\n    {\n\n        private readonly Table&lt;User&gt; users = null;\n        private readonly DataContext DataBase = null;\n        private const string connectionStr = @\"\u043f\u0443\u0442\u044c\u043a\u0431\u0430\u0437\u0435\";\n\n        public DatabaseWorker()\n        {\n            DataBase = new DataContext(connectionStr);\n            users = DataBase.GetTable&lt;User&gt;();\n        }\n\n        public User UserAuth(User User)\n        {\n            try\n            {\n                var user = users.SingleOrDefault(t =&gt; t.login.ToLower() == User.login.ToLower() &amp;&amp; t.password == User.password);\n                if (user != null)\n                    return user;\n                else\n                    return null;\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n\n        }\n\n        public void UserRegister(User user)\n        {\n            try\n            {\n                users.InsertOnSubmit(user);\n                DataBase.SubmitChanges();\n                Console.WriteLine(\n<pre wp-pre-tag-11=\"\"><\/pre>\n<p>quot;User{user.name} with id {user.uid} added\");<br \/>\n                foreach (var item in users)<br \/>\n                {<br \/>\n                    Console.WriteLine(item.login + \"n\");<br \/>\n                }<br \/>\n            }<br \/>\n            catch (Exception e)<br \/>\n            {<br \/>\n                Console.WriteLine(e);<br \/>\n            }<\/p>\n<p>        }<\/p>\n<p>        public bool LoginValidate(string login)<br \/>\n        {<br \/>\n            if (users.Any(x =&gt; x.login.ToLower() == login.ToLower()))<br \/>\n            {<br \/>\n                Console.WriteLine(\"Login already exists\");<br \/>\n                return false;<br \/>\n            }<br \/>\n            return true;<br \/>\n        }<br \/>\n        public void UserUpdate(User user)<br \/>\n        {<br \/>\n            var UserToUpdate = users.FirstOrDefault(x =&gt; x.uid == user.uid);<br \/>\n            UserToUpdate = user;<br \/>\n            DataBase.SubmitChanges();<br \/>\n            Console.WriteLine(<\/p>\n<pre wp-pre-tag-11=\"\"><\/pre>\n<p>quot;User {UserToUpdate.name} with id {UserToUpdate.uid} updated\");<br \/>\n            foreach (var item in users)<br \/>\n            {<br \/>\n                Console.WriteLine(item.login + \"n\");<br \/>\n            }<br \/>\n        }<br \/>\n        public User CookieValidate(string CookieInput)<br \/>\n        {<br \/>\n            User user = null;<br \/>\n            try<br \/>\n            {<br \/>\n                user = users.SingleOrDefault(x =&gt; x.cookie == CookieInput);<br \/>\n            }<br \/>\n            catch<br \/>\n            {<br \/>\n                return null;<br \/>\n            }<br \/>\n            if (user != null) return user;<br \/>\n            else return null;<br \/>\n        }<br \/>\n        public User FindUser(string login)<br \/>\n        {<br \/>\n            User user = null;<br \/>\n            try<br \/>\n            {<br \/>\n                user = users.Single(x =&gt; x.login.ToLower() == login.ToLower());<br \/>\n                if (user != null)<br \/>\n                {<br \/>\n                    return user;<br \/>\n                }<br \/>\n                else<br \/>\n                {<br \/>\n                    return null;<br \/>\n                }<br \/>\n            }<br \/>\n            catch (Exception)<br \/>\n            {<br \/>\n                return null;<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n}<\/p>\n<p><\/code><br \/>\n\u0418 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0447\u0430\u0441\u044b, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0451 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 4. \u0412\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430<\/h3>\n<p>\u0427\u0442\u043e \u0431\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434 \u0434\u0432\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430 Xamarin.Forms. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0430 C#. \u0421\u0434\u0435\u043b\u0430\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0435, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c. \u0414\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u044f \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u043d\u0430 HttpClient \u0438 \u043a\u0438\u043d\u0443\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 HttpRequestMessage \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u043e\u0440\u043c\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json. \u041e\u0441\u043e\u0431\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u044f, \u043e\u0442\u043a\u0440\u044b\u043b \u043b\u043e\u0433 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0442\u0430\u043c \u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0441 \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041b\u0451\u0433\u043a\u0438\u0439 \u0441\u0442\u0443\u043f\u043e\u0440, \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043e \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u043d\u0435\u0434\u0435\u043b\u0438 \u0442\u043e\u043c\u043d\u044b\u0445 \u0432\u0435\u0447\u0435\u0440\u043e\u043c. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u0440\u0430\u043b \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 HttpListner. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u043d\u0430 \u043d\u0451\u043c, \u044f \u0437\u0430 \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u043b KeyValuePair \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0444\u043e\u0440\u043c\u044b. \u0420\u0430\u0437\u0431\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0441\u044f \u0434\u043e \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>\u041d\u0430\u0447\u0430\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435, \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u043d\u0430 \u043f\u0440\u0435\u0436\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u044f \u0435\u0449\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u0447\u0430\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u0430\u0445. \u041e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u043e \u0441\u0430\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Tcp \u0431\u044b\u043b \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0438\u043c, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043b\u043e\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u044b \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u0433\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438. \u042d\u0442\u043e \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0431\u043e\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 RFC 6455. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0427\u0438\u0441\u0442\u043e \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430.<\/p>\n<p><b class=\"spoiler_title\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0447\u0430\u0442\u0443<\/b><\/p>\n<pre><code class=\"cs\"> private static async void HandleWebsocket(HttpListenerContext context)\n        {\n            var socketContext = await context.AcceptWebSocketAsync(null);\n            var socket = socketContext.WebSocket;\n            Locker.EnterWriteLock();\n            try\n            {\n                Clients.Add(socket);\n            }\n            finally\n            {\n                Locker.ExitWriteLock();\n            }\n\n            while (true)\n            {\n                var buffer = new ArraySegment&lt;byte&gt;(new byte[1024]);\n                var result = await socket.ReceiveAsync(buffer, CancellationToken.None);\n                var str = Encoding.Default.GetString(buffer);\n                Console.WriteLine(str);\n\n                for (int i = 0; i &lt; Clients.Count; i++)\n                {\n                    WebSocket client = Clients[i];\n\n                    try\n                    {\n                        if (client.State == WebSocketState.Open)\n                        {\n                            \n                            await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);\n                        }\n                    }\n                    catch (ObjectDisposedException)\n                    {\n                        Locker.EnterWriteLock();\n                        try\n                        {\n                            Clients.Remove(client);\n                            i--;\n                        }\n                        finally\n                        {\n                            Locker.ExitWriteLock();\n                        }\n                    }\n                }\n            }\n        }\n<\/code><\/pre>\n<p>\u0418 \u043e\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0421\u0435\u0440\u0432\u0435\u0440 \u0441\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u0442\u0432\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447. \u041c\u043d\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e ssl, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443.<\/p>\n<p>\u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0430\u0439\u0442\u0430 \u0434\u0432\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u0441\u0451 \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0449\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0438\u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c. \u0412\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u0441 200\u043c\u0441 \u0434\u043e 40-30\u043c\u0441. \u0418 \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e.<\/p>\n<blockquote><p><img decoding=\"async\" alt=\"\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 C# .Net framework\" src=\"\/wp-content\/uploads\/2020\/09\/1a49141bfa5913988caea3aff0fae33f.jpg\" style=\"display:block;margin: 0 auto;\"><\/p><\/blockquote>\n<p>\u0412\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 Tcp \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e\u0434 Http. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0443\u0436\u0435 \u043f\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0420\u0430\u0431\u043e\u0442\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0441\u0430\u0439\u0442\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438 \u043e\u0442\u043b\u0430\u0436\u0435\u043d\u0430 \u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e, \u0441 \u0442\u0435\u043c \u043b\u0438\u0448\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c html \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p><i>\u00ab\u041d\u0435 \u0437\u043d\u0430\u044f \u0431\u0440\u043e\u0434\u0443, \u043d\u0435 \u0441\u0443\u0439\u0441\u044f \u0432 \u0432\u043e\u0434\u0443\u00bb<\/i> \u0434\u0443\u043c\u0430\u044e, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442, \u043c\u043d\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0435\u043b\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445. \u041f\u0440\u043e\u0435\u043a\u0442 \u0443\u0436\u0435 \u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044f \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0443\u0441\u044c, \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0444\u0430\u043a\u0430\u043f\u0438\u043b \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0432\u0435\u0449\u0438. \u042f \u043c\u043d\u043e\u0433\u043e\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u044d\u0442\u043e.<\/p>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/517670\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0442\u044c \u0447\u0435\u043c \u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0438\u043d\u0434\u0435\u0440\u0430, \u043d\u043e \u0434\u043b\u044f IT \u0442\u0443\u0441\u043e\u0432\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0448\u044c\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0448\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0443\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432. \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93308,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0442\u044c \u0447\u0435\u043c \u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0438\u043d\u0434\u0435\u0440\u0430, \u043d\u043e \u0434\u043b\u044f IT \u0442\u0443\u0441\u043e\u0432\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0448\u044c\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0448\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0443\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432. \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 C# .Net framework | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0442\u044c \u0447\u0435\u043c \u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0438\u043d\u0434\u0435\u0440\u0430, \u043d\u043e \u0434\u043b\u044f IT \u0442\u0443\u0441\u043e\u0432\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0448\u044c\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0448\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0443\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432. \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-05T05:43:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-01-02T11:05:02+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Fortgeschrittenes Fahrradbau oder Client-Server-Anwendung auf Basis des C# .Net Frameworks | ProHoster","description":"Einf\u00fchrung. Alles begann damit, dass ein Kollege mir vorschlug, einen kleinen Webservice zu erstellen. Das sollte eine Art Tinder f\u00fcr die IT-Community werden. Die Funktionalit\u00e4t ist \u00e4u\u00dferst einfach: Man registriert sich, f\u00fcllt ein Profil aus und gelangt zur Hauptsache: der Suche nach Gespr\u00e4chspartnern, dem Ausbau seines Netzwerks und dem Kn\u00fcpfen neuer Bekanntschaften. Hier muss ich einen Abschweif machen und ein wenig...","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 C# .Net framework | ProHoster","og:description":"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0430\u0442\u044c \u0447\u0435\u043c \u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0438\u043d\u0434\u0435\u0440\u0430, \u043d\u043e \u0434\u043b\u044f IT \u0442\u0443\u0441\u043e\u0432\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0448\u044c\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0448\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0443\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432. \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prodvinutoe-velosipedostroenie-ili-klient-servernoe-prilozhenie-na-baze-c-net-framework","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-05T05:43:05+00:00","article:modified_time":"2021-01-02T11:05:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93307","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:50:29","updated":"2026-02-09 17:28:55"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/93307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=93307"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/93307\/revisions"}],"predecessor-version":[{"id":159526,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/93307\/revisions\/159526"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/93308"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=93307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=93307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=93307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}