เชชเชฐเชฟเชเชฏ
เช เชฌเชงเซเช เชคเซเชฏเชพเชฐเซ เชถเชฐเซ เชฅเชฏเซเช เชเซเชฏเชพเชฐเซ เชเช เชธเชพเชฅเซเชฆเชพเชฐเซ เชฎเชจเซ เชเช เชจเชพเชจเซ เชตเซเชฌ เชธเซเชตเชพ เชฌเชจเชพเชตเชตเชพเชจเซเช เชธเซเชเชจ เชเชฐเซเชฏเซเช. เชคเซ เชเชฟเชจเซเชกเชฐ เชเซเชตเซเช เชเชเชเช เชฌเชจเชตเชพเชจเซเช เชนเชคเซเช, เชชเชฐเชเชคเซ IT เชญเซเชก เชฎเชพเชเซ. เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เช
เชคเซเชฏเชเชค เชธเชฐเชณ เชเซ, เชคเชฎเซ เชจเซเชเชงเชฃเซ เชเชฐเซ, เชชเซเชฐเซเชซเชพเชเชฒ เชญเชฐเซ เช
เชจเซ เชฎเซเชเซเชฏ เชฎเซเชฆเซเชฆเชพ เชชเชฐ เชเชเชณ เชตเชงเซ, เชเชเชฒเซ เชเซ เชตเชพเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชตเซเชฏเชเซเชคเชฟ เชถเซเชงเซ เช
เชจเซ เชคเชฎเชพเชฐเชพ เชเซเชกเชพเชฃเซเชจเซ เชตเชฟเชธเซเชคเซเชค เชเชฐเซ เช
เชจเซ เชจเชตเชพ เชชเชฐเชฟเชเชฟเชคเซ เชฌเชจเชพเชตเซ.
เช เชนเซเช เชฎเชพเชฐเซ เชเช เชชเซเชเซเชนเช เชเชฐเชตเซ เชเซเชเช เช เชจเซ เชฎเชพเชฐเชพ เชตเชฟเชถเซ เชฅเซเชกเซเช เชเชนเซเชตเซเช เชเซเชเช, เชเซเชฅเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เชคเซ เชตเชงเซ เชธเซเชชเชทเซเช เชฅเชพเชฏ เชเซ เชฎเซเช เชตเชฟเชเชพเชธเชฎเชพเช เชเชตเชพ เชชเชเชฒเชพเช เชถเชพ เชฎเชพเชเซ เชฒเซเชงเชพเช.
เช เชเซเชทเชฃเซ เชนเซเช เชเช เชเซเชฎ เชธเซเชเซเชกเชฟเชฏเซเชฎเชพเช เชเซเชเชจเชฟเชเชฒ เชเชฐเซเชเชฟเชธเซเชเชจเซ เชนเซเชฆเซเชฆเซ เชงเชฐเชพเชตเซ เชเซ, C# เชฎเชพเช เชฎเชพเชฐเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เช เชจเซเชญเชต เชซเชเซเชค เชฏเซเชจเชฟเชเซ เชฎเชพเชเซ เชธเซเชเซเชฐเชฟเชชเซเชเซเชธ เช เชจเซ เชเชชเชฏเซเชเชฟเชคเชพเช เชฒเชเชตเชพ เชชเชฐ เช เชจเซ เช เชเชชเชฐเชพเชเชค, Android เชเชชเชเชฐเชฃเซ เชธเชพเชฅเซ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเชพ เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชชเซเชฒเชเชเชจเซเชธ เชฌเชจเชพเชตเชตเชพ เชชเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ. เชนเซเช เชนเชเซ เช เชจเชพเชจเชเชกเซ เชฆเซเชจเชฟเชฏเชพเชฅเซ เชเชเชณ เชตเชงเซเชฏเซ เชจ เชนเชคเซ, เช เชจเซ เชชเชเซ เชเชตเซ เชคเช เชเชญเซ เชฅเช.
เชญเชพเช 1. เชซเซเชฐเซเชฎ เชชเซเชฐเซเชเซเชเชพเชเชชเชฟเชเช
เช เชธเซเชตเชพ เชเซเชตเซ เชนเชถเซ เชคเซ เชจเชเซเชเซ เชเชฐเซเชฏเชพ เชชเชเซ, เชฎเซเช เช
เชฎเชฒเซเชเชฐเชฃ เชฎเชพเชเซเชจเชพ เชตเชฟเชเชฒเซเชชเซ เชถเซเชงเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช. เชธเซเชฅเซ เชธเชฐเชณ เชฌเชพเชฌเชค เช เชเซ เชเซ เชเซเช เชชเซเชฐเชเชพเชฐเชจเซ เชคเซเชฏเชพเชฐ เชเชเซเชฒ เชถเซเชงเชตเซ, เชเซเชจเชพ เชชเชฐ, เชตเชฟเชถเซเชต เชชเชฐเชจเชพ เชเซเชตเชกเชจเซ เชเซเชฎ, เชเชชเชฃเชพ เชฎเชฟเชเซเชจเชฟเชเซเชธเชจเซ เชเซเชเชเซ เชถเชเชพเชฏ เช
เชจเซ เชเชเซ เชตเชธเซเชคเซเชจเซ เชเชพเชนเซเชฐ เชจเชฟเชเชฆเชพเชจเซ เชธเชพเชฎเชจเซ เชเชฐเซ เชถเชเชพเชฏ.
เชชเชฐเชเชคเซ เช เชฐเชธเชชเซเชฐเชฆ เชจเชฅเซ, เชฎเชจเซ เชคเซเชฎเชพเช เชเซเช เชชเชกเชเชพเชฐ เช
เชฅเชตเชพ เช
เชฐเซเชฅ เชฆเซเชเชพเชคเซ เชจเชฅเซ, เช
เชจเซ เชคเซเชฅเซ เชฎเซเช เชตเซเชฌ เชคเชเชจเซเชเซ เช
เชจเซ เชคเซเชฎเชจเซ เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชจเซ เชชเชฆเซเชงเชคเชฟเชเชจเซ เช
เชญเซเชฏเชพเชธ เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช.
เชฎเซเช C# .Net เชชเชฐ เชฒเซเชเซ เช เชจเซ เชฆเชธเซเชคเชพเชตเซเชเซ เชเซเชเชจเซ เช เชญเซเชฏเชพเชธ เชถเชฐเซ เชเชฐเซเชฏเซ. เช เชนเซเช เชฎเชจเซ เชเชพเชฐเซเชฏ เชชเซเชฐเซเชฃ เชเชฐเชตเชพเชจเซ เชตเชฟเชตเชฟเชง เชฐเซเชคเซ เชฎเชณเซ. ASP.Net เช เชฅเชตเชพ Azure เชธเซเชตเชพเช เชเซเชตเชพ เชธเชเชชเซเชฐเซเชฃ เชเชเซเชฒเซเชฅเซ เชฎเชพเชเชกเซเชจเซ TcpHttp เชเชจเซเชเซเชถเชจเซเชธ เชธเชพเชฅเซ เชธเซเชงเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชจเซเชเชตเชฐเซเช เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฃเซ เชชเชฆเซเชงเชคเชฟเช เชเซ.
ASP เชธเชพเชฅเซ เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชฏเชพ เชชเชเซ, เชฎเซเช เชคเชฐเชค เช เชคเซเชจเซ เชจเชเชพเชฐเซ เชเชพเชขเซเชฏเซเช; เชฎเชพเชฐเชพ เชฎเชคเซ, เช เชฎเชพเชฐเซ เชธเซเชตเชพ เชฎเชพเชเซ เช เชจเชฟเชฐเซเชฃเชฏ เชเซเชฌ เชฎเซเชถเซเชเซเชฒ เชนเชคเซ. เช เชฎเซ เช เชชเซเชฒเซเชเชซเซเชฐเซเชฎเชจเซ เชเซเชทเชฎเชคเชพเชจเชพ เชคเซเชฐเซเชเชพ เชญเชพเชเชจเซ เชชเชฃ เชเชชเชฏเซเช เชจเชนเซเช เชเชฐเซเช, เชคเซเชฅเซ เชฎเซเช เชฎเชพเชฐเซ เชถเซเชง เชเชพเชฒเซ เชฐเชพเชเซ. เชชเชธเชเชฆเชเซ TCP เช เชจเซ Http เชเซเชฒเชพเชฏเชเช-เชธเชฐเซเชตเชฐ เชตเชเซเชเซ เชนเชคเซ. เช เชนเซเช, เชนเชพเชฌเซเชฐเซ เชชเชฐ, เชฎเชจเซ เชคเซเชจเชพ เชตเชฟเชถเซ เชเช เชฒเซเช เชฎเชณเซเชฏเซ , เชคเซเชจเซ เชเชเชคเซเชฐเชฟเชค เช เชจเซ เชชเชฐเซเชเซเชทเชฃ เชเชฐเซเชฏเชพ เชชเชเซ, เชฎเซเช เชเชพเชธ เชเชฐเซเชจเซ TCP เชเชจเซเชเซเชถเชจเซเชธ เชธเชพเชฅเซเชจเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชชเชฐ เชงเซเชฏเชพเชจ เชเซเชจเซเชฆเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชเซเชเชฒเชพเช เชเชพเชฐเชฃเซเชธเชฐ เชฎเซเช เชตเชฟเชเชพเชฐเซเชฏเซเช เชเซ http เชฎเชจเซ เชเซเชฐเซเชธ-เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชธเซเชฒเซเชฏเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ เชจเชนเซเช.
เชธเชฐเซเชตเชฐเชจเชพ เชชเซเชฐเชฅเชฎ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชเชจเซเชเซเชถเชจ เชชเซเชฐเซเชธเซเชธเชฟเชเช, เชธเซเชฅเชฟเชฐ เชตเซเชฌ เชชเซเชเชจเซ เชธเชพเชฎเชเซเชฐเซ เช เชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชกเซเชเชพเชฌเซเชเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เช เชจเซ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเซเช เชธเชพเชเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชฌเชจเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชเซเชฅเซ เชนเซเช เชชเชเซเชฅเซ Android เช เชจเซ iOS เชชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฎเซเชฐเซ เชถเชเซเช.
เช
เชนเซเช เชเซเชเชฒเชพเช เชเซเชก เชเซ
เช
เชเชคเชนเซเชจ เชฒเซเชชเชฎเชพเช เชเซเชฐเชพเชนเชเซเชจเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชฎเซเชเซเชฏ เชฅเซเชฐเซเชก:
using System;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace ClearServer
{
class Server
{
TcpListener Listener;
public Server(int Port)
{
Listener = new TcpListener(IPAddress.Any, Port);
Listener.Start();
while (true)
{
TcpClient Client = Listener.AcceptTcpClient();
Thread Thread = new Thread(new ParameterizedThreadStart(ClientThread));
Thread.Start(Client);
}
}
static void ClientThread(Object StateInfo)
{
new Client((TcpClient)StateInfo);
}
~Server()
{
if (Listener != null)
{
Listener.Stop();
}
}
static void Main(string[] args)
{
DatabaseWorker sqlBase = DatabaseWorker.GetInstance;
new Server(80);
}
}
}เชเซเชฒเชพเชฏเชเช เชนเซเชจเซเชกเชฒเชฐ เชชเซเชคเซ:
using System; using System.IO; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; namespace ClearServer { class Client { public Client(TcpClient Client) { string Message = ""; byte[] Buffer = new byte[1024]; int Count; while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0) { Message += Encoding.UTF8.GetString(Buffer, 0, Count); if (Message.IndexOf("rnrn") >= 0 || Message.Length > 4096) { Console.WriteLine(Message); break; } } Match ReqMatch = Regex.Match(Message, @"^w+s+([^s?]+)[^s]*s+HTTP/.*|"); if (ReqMatch == Match.Empty) { ErrorWorker.SendError(Client, 400); return; } string RequestUri = ReqMatch.Groups[1].Value; RequestUri = Uri.UnescapeDataString(RequestUri); if (RequestUri.IndexOf("..") >= 0) { ErrorWorker.SendError(Client, 400); return; } if (RequestUri.EndsWith("/")) { RequestUri += "index.html"; } string FilePath =quot;D:/Web/TestSite{RequestUri}";
if (!File.Exists(FilePath))
{
ErrorWorker.SendError(Client, 404);
return;
}string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.'));
string ContentType = "";
switch (Extension)
{
case ".htm":
case ".html":
ContentType = "text/html";
break;
case ".css":
ContentType = "text/css";
break;
case ".js":
ContentType = "text/javascript";
break;
case ".jpg":
ContentType = "image/jpeg";
break;
case ".jpeg":
case ".png":
case ".gif":
ContentType =quot;image/{Extension.Substring(1)}";
break;
default:
if (Extension.Length > 1)
{
ContentType =quot;application/{Extension.Substring(1)}";
}
else
{
ContentType = "application/unknown";
}
break;
}FileStream FS;
try
{
FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch (Exception)
{
ErrorWorker.SendError(Client, 500);
return;
}string Headers =
quot;HTTP/1.1 200 OKnContent-Type: {ContentType}nContent-Length: {FS.Length}nn";
byte[] HeadersBuffer = Encoding.ASCII.GetBytes(Headers);
Client.GetStream().Write(HeadersBuffer, 0, HeadersBuffer.Length);while (FS.Position < FS.Length)
{
Count = FS.Read(Buffer, 0, Buffer.Length);
Client.GetStream().Write(Buffer, 0, Count);
}FS.Close();
Client.Close();
}
}
}
เช เชจเซ เชธเซเชฅเชพเชจเชฟเช SQL เชชเชฐ เชฌเชจเซเชฒ เชชเซเชฐเชฅเชฎ เชกเซเชเชพเชฌเซเช:using System; using System.Data.Linq; namespace ClearServer { class DatabaseWorker { private static DatabaseWorker instance; public static DatabaseWorker GetInstance { get { if (instance == null) instance = new DatabaseWorker(); return instance; } } private DatabaseWorker() { string connectionStr = databasePath; using (DataContext db = new DataContext(connectionStr)) { Table<User> users = db.GetTable<User>(); foreach (var item in users) { Console.WriteLine(quot;{item.login} {item.password}");
}
}
}
}
}
เชเซเชฎ เชคเชฎเซ เชเซเช เชถเชเซ เชเซ, เช เชธเชเชธเซเชเชฐเชฃ เชฒเซเชเชฎเชพเชเชจเชพ เชธเชเชธเซเชเชฐเชฃเชฅเซ เชฅเซเชกเซเช เช เชฒเช เชเซ. เชตเชพเชธเซเชคเชตเชฎเชพเช, เช เชนเซเช เช เชฎเซ เชเชฎเซเชชเซเชฏเซเชเชฐ เชชเชฐเชจเชพ เชซเซเชฒเซเชกเชฐ เช เชจเซ เชกเซเชเชพเชฌเซเชเชฎเชพเชเชฅเซ เชชเซเชทเซเช เซเชจเซเช เชฒเซเชกเชฟเชเช เชเชฎเซเชฐเซเชฏเซเช เชเซ (เชเซ, เชฎเชพเชฐเซเช เชฆเซเชตเชพเชฐเชพ, เชเซเชเชพ เชเชจเซเชเซเชถเชจ เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชจเซ เชเชพเชฐเชฃเซ เช เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ).เชชเซเชฐเชเชฐเชฃ 2. เชตเซเชนเซเชฒเซเชธเชจเซ เชธเซเชเซเชฐเซ เชเชฐเชตเซ
เชธเชฐเซเชตเชฐเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซเชฏเชพ เชชเชเซ, เชนเซเช เชจเชฟเชทเซเชเชฐเซเชท เชชเชฐ เชเชตเซเชฏเซ เชเซ เช เชเช เชเชคเซเชคเชฎ เชเชเซเชฒ เชนเชถเซ(เชฌเชเชพเชกเชจเชพเชฐ: เชจเชพ), เช เชฎเชพเชฐเซ เชธเซเชตเชพ เชฎเชพเชเซ, เชคเซเชฅเซ เชชเซเชฐเซเชเซเชเซเชเซ เชคเชฐเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช.
เชงเซเชฎเซ เชงเซเชฎเซ, เชจเชตเชพ เชฎเซเชกเซเชฏเซเชฒเซ เชฆเซเชเชพเชตเชพ เชฒเชพเชเซเชฏเชพ เช เชจเซ เชธเชฐเซเชตเชฐเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชตเชฟเชธเซเชคเชฐเชคเซ เชเช. เชธเชฐเซเชตเชฐเซ เชเช เชเซเชธเซเช เชกเซเชฎเซเชจ เชฎเซเชณเชตเซเชฏเซเช เช เชจเซ เชเชธเชเชธเชเชฒ เชเชจเซเชเซเชถเชจ เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจ.เชธเชฐเซเชตเชฐ เช เชจเซ เชเซเชฒเชพเชฏเชเช เชชเซเชฐเซเชธเซเชธเชฟเชเชเชจเชพ เชคเชฐเซเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชคเซ เชฅเซเชกเซ เชตเชงเซ เชเซเชก
เชธเชฐเซเชตเชฐเชจเซเช เช เชชเชกเซเชเซเชก เชตเชฐเซเชเชจ เชเซเชฎเชพเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชเชชเชฏเซเช เชถเชพเชฎเซเชฒ เชเซ.using System; using System.Net; using System.Net.Sockets; using System.Reflection; using System.Security; using System.Security.Cryptography.X509Certificates; using System.Security.Permissions; using System.Security.Policy; using System.Threading; namespace ClearServer { sealed class Server { readonly bool ServerRunning = true; readonly TcpListener sslListner; public static X509Certificate serverCertificate = null; Server() { serverCertificate = X509Certificate.CreateFromSignedFile(@"C:sslitinder.online.crt"); sslListner = new TcpListener(IPAddress.Any, 443); sslListner.Start(); Console.WriteLine("Starting server.." + serverCertificate.Subject + "n" + Assembly.GetExecutingAssembly().Location); while (ServerRunning) { TcpClient SslClient = sslListner.AcceptTcpClient(); Thread SslThread = new Thread(new ParameterizedThreadStart(ClientThread)); SslThread.Start(SslClient); } } static void ClientThread(Object StateInfo) { new Client((TcpClient)StateInfo); } ~Server() { if (sslListner != null) { sslListner.Stop(); } } public static void Main(string[] args) { if (AppDomain.CurrentDomain.IsDefaultAppDomain()) { Console.WriteLine("Switching another domain"); new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase }; var current = AppDomain.CurrentDomain; var strongNames = new StrongName[0]; var domain = AppDomain.CreateDomain( "ClearServer", null, current.SetupInformation, new PermissionSet(PermissionState.Unrestricted), strongNames); domain.ExecuteAssembly(Assembly.GetExecutingAssembly().Location); } new Server(); } } }เช เชจเซ SSL เช เชงเชฟเชเซเชคเชคเชพ เชธเชพเชฅเซ เชเช เชจเชตเซ เชเซเชฒเชพเชฏเชเช เชนเซเชจเซเชกเชฒเชฐ เชชเชฃ:
using ClearServer.Core.Requester; using System; using System.Net.Security; using System.Net.Sockets; namespace ClearServer { public class Client { public Client(TcpClient Client) { SslStream SSlClientStream = new SslStream(Client.GetStream(), false); try { SSlClientStream.AuthenticateAsServer(Server.serverCertificate, clientCertificateRequired: false, checkCertificateRevocation: true); } catch (Exception e) { Console.WriteLine( "---------------------------------------------------------------------n" +quot;|{DateTime.Now:g}n|------------n|{Client.Client.RemoteEndPoint}n|------------n|Exception: {e.Message}n|------------n|Authentication failed - closing the connection.n" +
"---------------------------------------------------------------------n");
SSlClientStream.Close();
Client.Close();
}
new RequestContext(SSlClientStream, Client);
}}
}
เชชเชฐเชเชคเซ เชธเชฐเซเชตเชฐ เชซเชเซเชค TCP เชเชจเซเชเซเชถเชจ เชชเชฐ เช เชเชพเชฒเชคเซเช เชนเซเชตเชพเชฅเซ, เชตเชฟเชจเชเชคเซเชจเชพ เชธเชเชฆเชฐเซเชญเชจเซ เชเชณเชเซ เชถเชเซ เชคเซเชตเซเช เชฎเซเชกเซเชฏเซเชฒ เชฌเชจเชพเชตเชตเซเช เชเชฐเซเชฐเซ เชเซ. เชฎเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ เชเซ เช เชนเซเช เชเช เชชเชพเชฐเซเชธเชฐ เชฏเซเชเซเชฏ เชนเชถเซ เชเซ เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เช เชฒเช เชญเชพเชเซเชฎเชพเช เชตเชฟเชญเชพเชเชฟเชค เชเชฐเชถเซ เชเซเชจเซ เชธเชพเชฅเซ เชนเซเช เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชเชฐเซเชฐเซ เชเชตเชพเชฌเซ เชเชชเชตเชพ เชฎเชพเชเซ เชธเชเชชเชฐเซเช เชเชฐเซ เชถเชเซเช.เชชเชพเชฐเซเชธเชฐ
using ClearServer.Core.UserController; using ReServer.Core.Classes; using System; using System.Collections.Generic; using System.Linq; using System.Net.Security; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; namespace ClearServer.Core.Requester { public class RequestContext { public string Message = ""; private readonly byte[] buffer = new byte[1024]; public string RequestMethod; public string RequestUrl; public User RequestProfile; public User CurrentUser = null; public List<RequestValues> HeadersValues; public List<RequestValues> FormValues; private TcpClient TcpClient; private event Action<SslStream, RequestContext> OnRead = RequestHandler.OnHandle; DatabaseWorker databaseWorker = new DatabaseWorker(); public RequestContext(SslStream ClientStream, TcpClient Client) { this.TcpClient = Client; try { ClientStream.BeginRead(buffer, 0, buffer.Length, ClientRead, ClientStream); } catch { return; } } private void ClientRead(IAsyncResult ar) { SslStream ClientStream = (SslStream)ar.AsyncState; if (ar.IsCompleted) { Message = Encoding.UTF8.GetString(buffer); Message = Uri.UnescapeDataString(Message); Console.WriteLine(quot;n{DateTime.Now:g} Client IP:{TcpClient.Client.RemoteEndPoint}n{Message}");
RequestParse();
HeadersValues = HeaderValues();
FormValues = ContentValues();
UserParse();
ProfileParse();
OnRead?.Invoke(ClientStream, this);
}
}private void RequestParse()
{
Match methodParse = Regex.Match(Message, @"(^w+)s+([^s?]+)[^s]*s+HTTP/.*|");
RequestMethod = methodParse.Groups[1].Value.Trim();
RequestUrl = methodParse.Groups[2].Value.Trim();
}
private void UserParse()
{
string cookie;
try
{
if (HeadersValues.Any(x => x.Name.Contains("Cookie")))
{
cookie = HeadersValues.FirstOrDefault(x => x.Name.Contains("Cookie")).Value;
try
{
CurrentUser = databaseWorker.CookieValidate(cookie);
}
catch { }
}
}
catch { }}
private List<RequestValues> HeaderValues()
{
var values = new List<RequestValues>();
var parse = Regex.Matches(Message, @"(.*?): (.*?)n");
foreach (Match match in parse)
{
values.Add(new RequestValues()
{
Name = match.Groups[1].Value.Trim(),
Value = match.Groups[2].Value.Trim()
});
}
return values;
}private void ProfileParse()
{
if (RequestUrl.Contains("@"))
{
RequestProfile = databaseWorker.FindUser(RequestUrl.Substring(2));
RequestUrl = "/profile";
}
}
private List<RequestValues> ContentValues()
{
var values = new List<RequestValues>();
var output = Message.Trim('n').Split().Last();
var parse = Regex.Matches(output, @"([^&].*?)=([^&]*b)");
foreach (Match match in parse)
{
values.Add(new RequestValues()
{
Name = match.Groups[1].Value.Trim(),
Value = match.Groups[2].Value.Trim().Replace('+', ' ')
});
}
return values;
}
}
}
เชคเซเชจเซ เชธเชพเชฐ เชจเชฟเชฏเชฎเชฟเชค เช เชญเชฟเชตเซเชฏเชเซเชคเชฟเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เชญเชพเชเซเชฎเชพเช เชคเซเชกเชตเชพเชจเซ เชเซ. เช เชฎเชจเซ เชเซเชฒเชพเชฏเชเช เชคเชฐเชซเชฅเซ เชธเชเชฆเซเชถ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เชเซ, เชชเซเชฐเชฅเชฎ เชฒเชพเชเชจ เชชเชธเชเชฆ เชเชฐเซ, เชเซเชฎเชพเช เชชเชฆเซเชงเชคเชฟ เช เชจเซ เชตเชฟเชจเชเชคเซ url เชถเชพเชฎเซเชฒ เชเซ. เชชเชเซ เชเชชเชฃเซ เชฎเชฅเชพเชณเชพเช เชตเชพเชเชเซเช เชเซเช, เชเซเชจเซ เชเชชเชฃเซ HeaderName=Content เชซเซเชฐเซเชฎเชจเซ เชเชฐเซเชฎเชพเช เชฎเซเชเซเช เชเซเช, เช เชจเซ เชเซ เชเชชเชฒเชฌเซเชง เชนเซเชฏ เชคเซ, เชคเซเชจเซ เชธเชพเชฅเซเชจเซ เชธเชพเชฎเชเซเชฐเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชตเซเชฐเซเชธเซเชเซเชฐเชฟเชเช) เชชเชฃ เชถเซเชงเซเช เชเซเช เชเซ เชเชชเชฃเซ เชธเชฎเชพเชจ เชเชฐเซเชฎเชพเช เชชเชฃ เชฎเซเชเซเช เชเซเช. เชตเชงเซเชฎเชพเช, เชตเชฟเชถเซเชฒเซเชทเช เชตเชฐเซเชคเชฎเชพเชจ เชเซเชฒเชพเชฏเชเช เช เชงเชฟเชเซเชค เชเซ เชเซ เชเซเชฎ เชคเซ เชถเซเชงเซ เชเชพเชขเซ เชเซ เช เชจเซ เชคเซเชจเซ เชกเซเชเชพ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเซ เชเซ. เช เชงเชฟเชเซเชค เชเซเชฒเชพเชฏเชเชเชจเซ เชคเชฎเชพเชฎ เชตเชฟเชจเชเชคเซเชเชฎเชพเช เชเช เช เชงเชฟเชเซเชคเชคเชพ เชนเซเชถ เชนเซเชฏ เชเซ, เชเซ เชเซเชเซเชเชฎเชพเช เชธเชเชเซเชฐเชนเชฟเชค เชนเซเชฏ เชเซ, เชเชจเซ เชเชพเชฐเชฃเซ เชฌเซ เชชเซเชฐเชเชพเชฐเชจเชพ เชเซเชฒเชพเชฏเชเช เชฎเชพเชเซ เชตเชงเซ เชเชชเชฐเซเชเชฟเชเช เชฒเซเชเซเชเชจเซ เช เชฒเช เชเชฐเชตเชพเชจเซเช เช เชจเซ เชคเซเชฎเชจเซ เชธเชพเชเชพ เชเชตเชพเชฌเซ เชเชชเชตเชพเชจเซเช เชถเชเซเชฏ เชเซ.เชธเชพเชฐเซเช, เชเช เชจเชพเชจเซเช, เชธเชฐเชธ เชฒเชเซเชทเชฃ เชเซ เชเซ เชเช เช เชฒเช เชฎเซเชกเซเชฏเซเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฏเซเชเซเชฏ เชนเชถเซ, "site.com/@UserName" เชเซเชตเชพ เชชเซเชฐเชถเซเชจเซเชจเซ เชเชคเชฟเชถเซเชฒ เชฐเซเชคเซ เชเชจเชฐเซเช เชเชฐเซเชฒเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชชเซเชทเซเช เซเชฎเชพเช เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชเชฐเชตเชพ. เชตเชฟเชจเชเชคเซ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซเชฏเชพ เชชเชเซ, เชจเซเชเซเชจเชพ เชฎเซเชกเซเชฏเซเชฒเซ เช เชฎเชฒเชฎเชพเช เชเชตเซ เชเซ.
เชชเซเชฐเชเชฐเชฃ 3. เชธเซเชเซเช เชฐเชฟเชเช เชตเซเชนเซเชฒ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช, เชธเชพเชเชเชณเชจเซเช เชฒเซเชฌเซเชฐเชฟเชเซเชถเชจ
เชเชฒเชฆเซ เชชเชพเชฐเซเชธเชฐเซ เชคเซเชจเซเช เชเชพเชฐเซเชฏ เชชเซเชฐเซเชฃ เชเชฐเซเชฏเซเช, เชนเซเชจเซเชกเชฒเชฐ เชฐเชฎเชคเชฎเชพเช เชเชตเซ เชเซ, เชธเชฐเซเชตเชฐเชจเซ เชตเชงเซ เชธเซเชเชจเชพเช เชเชชเซ เชเซ เช เชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฃเชจเซ เชฌเซ เชญเชพเชเซเชฎเชพเช เชตเชนเซเชเชเซ เชเซ.
เชธเชฐเชณ เชนเซเชจเซเชกเชฒเชฐ
using ClearServer.Core.UserController; using System.Net.Security; namespace ClearServer.Core.Requester { public class RequestHandler { public static void OnHandle(SslStream ClientStream, RequestContext context) { if (context.CurrentUser != null) { new AuthUserController(ClientStream, context); } else { new NonAuthUserController(ClientStream, context); }; } } }เชตเชพเชธเซเชคเชตเชฎเชพเช, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เช เชงเชฟเชเซเชคเชคเชพ เชฎเชพเชเซ เชฎเชพเชคเซเชฐ เชเช เช เชคเชชเชพเชธ เชเซ, เชเซเชจเชพ เชชเชเซ เชตเชฟเชจเชเชคเซเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชถเชฐเซ เชฅเชพเชฏ เชเซ.
เชเซเชฒเชพเชฏเชจเซเช เชจเชฟเชฏเชเชคเซเชฐเชเซ
เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เช เชงเชฟเชเซเชค เชจเชฅเซ, เชคเซ เชคเซเชจเชพ เชฎเชพเชเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชซเชเซเชค เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชชเซเชฐเซเชซเชพเชเชฒเซเชธเชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจ เช เชจเซ เช เชงเชฟเชเซเชค เชจเซเชเชงเชฃเซ เชตเชฟเชเชกเซ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ. เช เชงเชฟเชเซเชค เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฎเชพเชเซเชจเซ เชเซเชก เชฒเชเชญเช เชธเชฎเชพเชจ เชฆเซเชเชพเชฏ เชเซ, เชคเซเชฅเซ เชฎเชจเซ เชคเซเชจเซ เชกเซเชชเซเชฒเชฟเชเซเช เชเชฐเชตเชพเชจเซเช เชเซเช เชเชพเชฐเชฃ เชฆเซเชเชพเชคเซเช เชจเชฅเซ.เช เชจเชงเชฟเชเซเชค เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ
using ClearServer.Core.Requester; using System.IO; using System.Net.Security; namespace ClearServer.Core.UserController { internal class NonAuthUserController { private readonly SslStream ClientStream; private readonly RequestContext Context; private readonly WriteController WriteController; private readonly AuthorizationController AuthorizationController; private readonly string ViewPath = "C:/Users/drdre/source/repos/ClearServer/View"; public NonAuthUserController(SslStream clientStream, RequestContext context) { this.ClientStream = clientStream; this.Context = context; this.WriteController = new WriteController(clientStream); this.AuthorizationController = new AuthorizationController(clientStream, context); ResourceLoad(); } void ResourceLoad() { string[] blockextension = new string[] {"cshtml", "html", "htm"}; bool block = false; foreach (var item in blockextension) { if (Context.RequestUrl.Contains(item)) { block = true; break; } } string FilePath = ""; string Header = ""; var RazorController = new RazorController(Context, ClientStream); switch (Context.RequestMethod) { case "GET": switch (Context.RequestUrl) { case "/": FilePath = ViewPath + "/loginForm.html"; Header =quot;HTTP/1.1 200 OKnContent-Type: text/html";
WriteController.DefaultWriter(Header, FilePath);
break;
case "/profile":
RazorController.ProfileLoader(ViewPath);
break;
default:
//ะฒ ะดะฐะฝะฝะพะผ ะฑะปะพะบะต ะบะพะดะฐ ะฟัะพะธัั ะพะดะธั ะพััะตัะตะฝะธะต ะทะฐะฟัะพัะพะฒ ะบ ัะตัะฒะตัั ะฟะพ ะฟััะผะพะผั ะฐะดัะตัั ัััะฐะฝะธัั ะฒะธะดะฐ site.com/page.html
if (!File.Exists(ViewPath + Context.RequestUrl) | block)
{
RazorController.ErrorLoader(404);}
else if (Path.HasExtension(Context.RequestUrl) && File.Exists(ViewPath + Context.RequestUrl))
{
Header = WriteController.ContentType(Context.RequestUrl);
FilePath = ViewPath + Context.RequestUrl;
WriteController.DefaultWriter(Header, FilePath);
}
break;
}
break;case "POST":
AuthorizationController.MethodRecognizer();
break;}
}
}
}
เช เชจเซ เช เชฒเชฌเชคเซเชค, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เช เชฎเซเช เชชเซเชฐเชเชพเชฐเชจเซ เชชเซเชทเซเช เชธเชพเชฎเชเซเชฐเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ, เชคเซเชฅเซ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ เชฎเชพเชเซ เชจเซเชเซเชจเซเช เชฎเซเชกเซเชฏเซเชฒ เชเซ, เชเซ เชธเชเชธเชพเชงเชจ เชตเชฟเชจเชเชคเซเชเชจเซ เชเชตเชพเชฌ เชเชชเชตเชพ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชเซ.เชฐเชพเชเชเชฐ เชเชเชเซเชฐเซเชฒเชฐ
using System; using System.IO; using System.Net.Security; using System.Text; namespace ClearServer.Core.UserController { public class WriteController { SslStream ClientStream; public WriteController(SslStream ClientStream) { this.ClientStream = ClientStream; } public void DefaultWriter(string Header, string FilePath) { FileStream fileStream; try { fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); Header =quot;{Header}nContent-Length: {fileStream.Length}nn";
ClientStream.Write(Encoding.UTF8.GetBytes(Header));
byte[] response = new byte[fileStream.Length];
fileStream.BeginRead(response, 0, response.Length, OnFileRead, response);
}
catch { }
}public string ContentType(string Uri)
{
string extension = Path.GetExtension(Uri);
string Header = "HTTP/1.1 200 OKnContent-Type:";
switch (extension)
{
case ".html":
case ".htm":
returnquot;{Header} text/html";
case ".css":
returnquot;{Header} text/css";
case ".js":
returnquot;{Header} text/javascript";
case ".jpg":
case ".jpeg":
case ".png":
case ".gif":
returnquot;{Header} image/{extension}";
default:
if (extension.Length > 1)
{
returnquot;{Header} application/" + extension.Substring(1);
}
else
{
returnquot;{Header} application/unknown";
}
}
}public void OnFileRead(IAsyncResult ar)
{
if (ar.IsCompleted)
{
var file = (byte[])ar.AsyncState;
ClientStream.BeginWrite(file, 0, file.Length, OnClientSend, null);
}
}public void OnClientSend(IAsyncResult ar)
{
if (ar.IsCompleted)
{
ClientStream.Close();
}
}
}
เชชเชฐเชเชคเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชคเซเชจเซ เชชเซเชฐเซเชซเชพเชเชฒ เช เชจเซ เช เชจเซเชฏ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชชเซเชฐเซเชซเชพเชเชฒเซเชธ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชเซ, เชฎเซเช RazorEngine เช เชฅเชตเชพ เชคเซเชจเชพ เชฌเชฆเชฒเซ เชคเซเชจเซ เชญเชพเช เชตเชพเชชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชคเซเชฎเชพเช เช เชฎเชพเชจเซเชฏ เชตเชฟเชจเชเชคเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเซ เช เชจเซ เชฏเซเชเซเชฏ เชญเซเชฒ เชเซเชก เชเชพเชฐเซ เชเชฐเชตเชพเชจเซ เชชเชฃ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ.เชฐเซเชเชฐ เชเชเชเซเชฐเซเชฒเชฐ
using ClearServer.Core.Requester; using RazorEngine; using RazorEngine.Templating; using System; using System.IO; using System.Net; using System.Net.Security; namespace ClearServer.Core.UserController { internal class RazorController { private RequestContext Context; private SslStream ClientStream; dynamic PageContent; public RazorController(RequestContext context, SslStream clientStream) { this.Context = context; this.ClientStream = clientStream; } public void ProfileLoader(string ViewPath) { string Filepath = ViewPath + "/profile.cshtml"; if (Context.RequestProfile != null) { if (Context.CurrentUser != null && Context.RequestProfile.login == Context.CurrentUser.login) { try { PageContent = new { isAuth = true, Name = Context.CurrentUser.name, Login = Context.CurrentUser.login, Skills = Context.CurrentUser.skills }; ClientSend(Filepath, Context.CurrentUser.login); } catch (Exception e) { Console.WriteLine(e); } } else { try { PageContent = new { isAuth = false, Name = Context.RequestProfile.name, Login = Context.RequestProfile.login, Skills = Context.RequestProfile.skills }; ClientSend(Filepath, "PublicProfile:"+ Context.RequestProfile.login); } catch (Exception e) { Console.WriteLine(e); } } } else { ErrorLoader(404); } } public void ErrorLoader(int Code) { try { PageContent = new { ErrorCode = Code, Message = ((HttpStatusCode)Code).ToString() }; string ErrorPage = "C:/Users/drdre/source/repos/ClearServer/View/Errors/ErrorPage.cshtml"; ClientSend(ErrorPage, Code.ToString()); } catch { } } private void ClientSend(string FilePath, string Key) { var template = File.ReadAllText(FilePath); var result = Engine.Razor.RunCompile(template, Key, null, (object)PageContent); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(result); ClientStream.BeginWrite(buffer, 0, buffer.Length, OnClientSend, ClientStream); } private void OnClientSend(IAsyncResult ar) { if (ar.IsCompleted) { ClientStream.Close(); } } } }เช เชจเซ เช เชฒเชฌเชคเซเชค, เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชงเชฟเชเซเชค เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชเชเชพเชธเชฃเซ เชฎเชพเชเซ, เช เชงเชฟเชเซเชคเชคเชพ เชเชฐเซเชฐเซ เชเซ. เช เชงเชฟเชเซเชคเชคเชพ เชฎเซเชกเซเชฏเซเชฒ เชกเซเชเชพเชฌเซเช เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ. เชธเชพเชเช เชชเชฐเชจเชพ เชซเซเชฐเซเชฎเซเชธเชฎเชพเชเชฅเซ เชชเซเชฐเชพเชชเซเชค เชกเซเชเชพเชจเซ เชธเชเชฆเชฐเซเชญเชฎเชพเชเชฅเซ เชตเชฟเชถเซเชฒเซเชทเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชฌเชฆเชฒเชพเชฎเชพเช เชเซเชเซเช เช เชจเซ เชธเซเชตเชพเชจเซ เชเชเซเชธเซเชธ เชฎเซเชณเชตเซ เชเซ.
เช เชงเชฟเชเซเชคเชคเชพ เชฎเซเชกเซเชฏเซเชฒ
using ClearServer.Core.Cookies; using ClearServer.Core.Requester; using ClearServer.Core.Security; using System; using System.Linq; using System.Net.Security; using System.Text; namespace ClearServer.Core.UserController { internal class AuthorizationController { private SslStream ClientStream; private RequestContext Context; private UserCookies cookies; private WriteController WriteController; DatabaseWorker DatabaseWorker; RazorController RazorController; PasswordHasher PasswordHasher; public AuthorizationController(SslStream clientStream, RequestContext context) { ClientStream = clientStream; Context = context; DatabaseWorker = new DatabaseWorker(); WriteController = new WriteController(ClientStream); RazorController = new RazorController(context, clientStream); PasswordHasher = new PasswordHasher(); } internal void MethodRecognizer() { if (Context.FormValues.Count == 2 && Context.FormValues.Any(x => x.Name == "password")) Authorize(); else if (Context.FormValues.Count == 3 && Context.FormValues.Any(x => x.Name == "regPass")) Registration(); else { RazorController.ErrorLoader(401); } } private void Authorize() { var values = Context.FormValues; var user = new User() { login = values[0].Value, password = PasswordHasher.PasswordHash(values[1].Value) }; user = DatabaseWorker.UserAuth(user); if (user != null) { cookies = new UserCookies(user.login, user.password); user.cookie = cookies.AuthCookie; DatabaseWorker.UserUpdate(user); var response = Encoding.UTF8.GetBytes(quot;HTTP/1.1 301 Moved PermanentlynLocation: /@{user.login}nSet-Cookie: {cookies.AuthCookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn");
ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);}
else
{
RazorController.ErrorLoader(401);}
}private void Registration()
{
var values = Context.FormValues;
var user = new User()
{
name = values[0].Value,
login = values[1].Value,
password = PasswordHasher.PasswordHash(values[2].Value),
};
cookies = new UserCookies(user.login, user.password);
user.cookie = cookies.AuthCookie;
if (DatabaseWorker.LoginValidate(user.login))
{
Console.WriteLine("User ready");
Console.WriteLine(quot;{user.password} {user.password.Trim().Length}");
DatabaseWorker.UserRegister(user);
var response = Encoding.UTF8.GetBytes(quot;HTTP/1.1 301 Moved PermanentlynLocation: /@{user.login}nSet-Cookie: {user.cookie}; Expires={DateTime.Now.AddDays(2):R}; Secure; HttpOnlynn");
ClientStream.BeginWrite(response, 0, response.Length, WriteController.OnClientSend, null);
}
else
{
RazorController.ErrorLoader(401);
}
}
}
}
เช เชจเซ เชกเซเชเชพเชฌเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเช เชเชจเชพ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ:เชกเซเชเชพเชฌเซเช
using ClearServer.Core.UserController; using System; using System.Data.Linq; using System.Linq; namespace ClearServer { class DatabaseWorker { private readonly Table<User> users = null; private readonly DataContext DataBase = null; private const string connectionStr = @"ะฟัััะบะฑะฐะทะต"; public DatabaseWorker() { DataBase = new DataContext(connectionStr); users = DataBase.GetTable<User>(); } public User UserAuth(User User) { try { var user = users.SingleOrDefault(t => t.login.ToLower() == User.login.ToLower() && t.password == User.password); if (user != null) return user; else return null; } catch (Exception) { return null; } } public void UserRegister(User user) { try { users.InsertOnSubmit(user); DataBase.SubmitChanges(); Console.WriteLine(quot;User{user.name} with id {user.uid} added");
foreach (var item in users)
{
Console.WriteLine(item.login + "n");
}
}
catch (Exception e)
{
Console.WriteLine(e);
}}
public bool LoginValidate(string login)
{
if (users.Any(x => x.login.ToLower() == login.ToLower()))
{
Console.WriteLine("Login already exists");
return false;
}
return true;
}
public void UserUpdate(User user)
{
var UserToUpdate = users.FirstOrDefault(x => x.uid == user.uid);
UserToUpdate = user;
DataBase.SubmitChanges();
Console.WriteLine(quot;User {UserToUpdate.name} with id {UserToUpdate.uid} updated");
foreach (var item in users)
{
Console.WriteLine(item.login + "n");
}
}
public User CookieValidate(string CookieInput)
{
User user = null;
try
{
user = users.SingleOrDefault(x => x.cookie == CookieInput);
}
catch
{
return null;
}
if (user != null) return user;
else return null;
}
public User FindUser(string login)
{
User user = null;
try
{
user = users.Single(x => x.login.ToLower() == login.ToLower());
if (user != null)
{
return user;
}
else
{
return null;
}
}
catch (Exception)
{
return null;
}
}
}
}
เช เชจเซ เชฌเชงเซเช เชเชพเชฎ เชเชฐเซ เชเซ เชเซเชฎ เชเซ เชเชกเชฟเชฏเชพเชณเชจเซเช เชเชพเชฎ, เช เชงเชฟเชเซเชคเชคเชพ เช เชจเซ เชจเซเชเชงเชฃเซ เชเชพเชฐเซเชฏ, เชธเซเชตเชพเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชฒเชเซเชคเซเชคเชฎ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชชเชนเซเชฒเซเชฅเซ เช เชเซ เช เชจเซ เชธเชฎเชฏ เชเชตเซ เชเชฏเซ เชเซ เชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเชเซ เช เชจเซ เชเชเซ เชตเชธเซเชคเซเชจเซ เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏเซ เชธเชพเชฅเซ เชเซเชกเซ เชเซ เชเซเชจเชพ เชฎเชพเชเซ เชฌเชงเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชฐเชนเซเชฏเซเช เชเซ.เชชเซเชฐเชเชฐเชฃ 4. เชฌเชพเชเชเชจเซ เชซเซเชเชเซ เชฆเซเชตเซเช
เชฌเซ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชฎเชพเชเซ เชฌเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเชเชตเชพเชจเชพ เชฎเชเซเชฐเซ เชเชฐเซเชเชจเซ เชเชเชพเชกเชตเชพ เชฎเชพเชเซ, เชฎเซเช Xamarin.Forms เชชเชฐ เชเซเชฐเซเชธ-เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชฌเชจเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชซเชฐเซเชฅเซ, เช เชนเชเซเชเชค เชฎเชพเชเซ เชเชญเชพเชฐ เชเซ เชคเซ C# เชฎเชพเช เชเซ. เชเช เชชเชฐเซเชเซเชทเชฃ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซเชฏเชพ เชเซ เชธเชฐเซเชตเชฐเชจเซ เชซเชเซเชค เชกเซเชเชพ เชฎเซเชเชฒเซ เชเซ, เชฎเชจเซ เชเช เชฐเชธเชชเซเชฐเชฆ เชฎเซเชฆเซเชฆเซ เชฎเชณเซเชฏเซ. เชเชชเชเชฐเชฃเชจเซ เชตเชฟเชจเชเชคเซ เชฎเชพเชเซ, เชเชจเชเชฆ เชฎเชพเชเซ, เชฎเซเช เชคเซเชจเซ HttpClient เชชเชฐ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซเชฏเซเช เช เชจเซ HttpRequestMessage เชธเชฐเซเชตเชฐ เชชเชฐ เชฎเซเชเชฒเซเชฏเซเช, เชเซเชฎเชพเช json เชซเซเชฐเซเชฎเซเชเชฎเชพเช เช เชงเชฟเชเซเชคเชคเชพ เชซเซเชฐเซเชฎเชฎเชพเชเชฅเซ เชกเซเชเชพ เชถเชพเชฎเซเชฒ เชเซ. เชเชพเชธ เชเชฐเซเชจเซ เชเชเชเชชเชฃ เช เชชเซเชเซเชทเชพ เชฐเชพเชเซเชฏเชพ เชตเชฟเชจเชพ, เชฎเซเช เชธเชฐเซเชตเชฐ เชฒเซเช เชเซเชฒเซเชฏเซ เช เชจเซ เชคเซเชฏเชพเช เชคเชฎเชพเชฎ เชกเซเชเชพ เชธเชพเชฅเซ เชเชชเชเชฐเชฃเชจเซ เชตเชฟเชจเชเชคเซ เชเซเช. เชธเชนเซเช เชฎเซเชฐเซเชเชคเชพ, เชเซเชฒเซเชฒเชพ 3 เช เช เชตเชพเชกเชฟเชฏเชพเชฎเชพเช เชจเชฟเชธเซเชคเซเช เชธเชพเชเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชฆเชฐเซเช เชตเชธเซเชคเซเชจเซ เชเชพเชเซเชคเชฟ. เชฎเซเชเชฒเซเชฒเชพ เชกเซเชเชพเชจเซ เชเซเชเชธเชพเช เชคเชชเชพเชธเชตเชพ เชฎเชพเชเซ, เชฎเซเช HttpListner เชชเชฐ เชเช เชเซเชธเซเช เชธเชฐเซเชตเชฐ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซเชฏเซเช. เชคเซเชจเชพ เชชเชฐ เชชเชนเซเชฒเซเชฅเซ เช เชฌเซเชเซ เชตเชฟเชจเชเชคเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเซเชฏเชพ เชชเชเซ, เชฎเซเช เชคเซเชจเซ เชเซเชกเชจเซ เชฌเซ เชฒเซเชเซเชเชฎเชพเช เช เชฒเช เชเชฐเซ เช เชจเซ เชซเซเชฐเซเชฎเชฎเชพเชเชฅเซ เชกเซเชเชพเชจเซ เชเซเชตเซเชฒเซเชฏเซเชชเซเชฏเชฐ เชชเซเชฐเชพเชชเซเชค เชเชฐเซ. เชเซเชตเซเชฐเซเชจเซเช เชชเชพเชฐเซเชธเชฟเชเช เชฌเซ เชฒเซเชเซเชเชฎเชพเช เชเชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช.
เชฎเซเช เชตเชงเซ เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช, เชคเซเชจเซ เช เชเชพเช เชเชฒเซเชฒเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชจ เชนเชคเซ, เชชเชฐเชเชคเซ เช เชเชพเชเชจเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชฎเซเช เชตเซเชฌเชธเซเชเซเชเซเชธ เชชเชฐ เชฌเชจเซเชฒเซ เชเซเชเชจเซ เชชเชฃ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชนเชคเซ. เชคเซ เชเซเชฌ เช เชธเชพเชฐเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซเชฏเซเช, เชชเชฐเชเชคเซ Tcp เชฆเซเชตเชพเชฐเชพ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชธเชฟเชฆเซเชงเชพเชเชค เชจเชฟเชฐเชพเชถเชพเชเชจเช เชนเชคเซ; เชชเชคเซเชฐเชตเซเชฏเชตเชนเชพเชฐ เชฒเซเช เชธเชพเชฅเซ เชฌเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชธเชเซเชทเชฎ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเซเชฌ เช เชฌเชฟเชจเชเชฐเซเชฐเซ เชเชพเชฎ เชเชฐเชตเซเช เชชเชกเซเชฏเซเช. เชเชฎเชพเช เชเชจเซเชเซเชถเชจเชจเซ เชธเซเชตเชฟเช เชเชฐเชตเชพเชจเซ เชตเชฟเชจเชเชคเซเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เช เชจเซ RFC 6455 เชชเซเชฐเซเชเซเชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เชคเซเชฅเซ, เชเซเชธเซเช เชธเชฐเซเชตเชฐเชฎเชพเช, เชฎเซเช เชเช เชธเชฐเชณ เชตเซเชฌเชธเซเชเซเช เชเชจเซเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชฎเชพเชคเซเชฐ เชเชจเชเชฆ เชฎเชพเชเซ.
เชเซเช เชธเชพเชฅเซ เชเซเชกเชพเช
private static async void HandleWebsocket(HttpListenerContext context) { var socketContext = await context.AcceptWebSocketAsync(null); var socket = socketContext.WebSocket; Locker.EnterWriteLock(); try { Clients.Add(socket); } finally { Locker.ExitWriteLock(); } while (true) { var buffer = new ArraySegment<byte>(new byte[1024]); var result = await socket.ReceiveAsync(buffer, CancellationToken.None); var str = Encoding.Default.GetString(buffer); Console.WriteLine(str); for (int i = 0; i < Clients.Count; i++) { WebSocket client = Clients[i]; try { if (client.State == WebSocketState.Open) { await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); } } catch (ObjectDisposedException) { Locker.EnterWriteLock(); try { Clients.Remove(client); i--; } finally { Locker.ExitWriteLock(); } } } } }เช เชจเซ เชคเซ เชเชพเชฎ เชเชฐเซเชฏเซเช. เชธเชฐเซเชตเชฐเซ เชชเซเชคเซ เชเชจเซเชเซเชถเชจ เชเซเช เชตเซเชฏเซเช เช เชจเซ เชชเซเชฐเชคเชฟเชญเชพเชต เชเซ เชเชจเชฐเซเช เชเชฐเซ. เชฎเชพเชฐเซ SSL เชฆเซเชตเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชจเซเชเชงเชฃเซเชจเซ เช เชฒเชเชฅเซ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเชตเชพเชจเซ เชชเชฃ เชเชฐเซเชฐ เชจเชนเซเชคเซ; เชคเซ เชชเซเชฐเชคเซเช เชนเชคเซเช เชเซ เชธเชฟเชธเซเชเชฎ เชชเชพเชธเซ เชเชตเชถเซเชฏเช เชชเซเชฐเซเช เชชเชฐ เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒเซเช เชนเชคเซเช.
เชเชชเชเชฐเชฃ เชฌเชพเชเซ เช เชจเซ เชธเชพเชเช เชฌเชพเชเซ เชชเชฐ, เชฌเซ เชเซเชฒเชพเชฏเชจเซเชเซเชธ เชธเชเชฆเซเชถเชพเชเชจเซ เชเชชเชฒเซ เชเชฐเซ เชเซ, เช เชฌเชงเซเช เชฒเซเช เชฅเชฏเซเชฒ เชนเชคเซเช. เชธเชฐเซเชตเชฐเชจเซ เชงเซเชฎเซเช เชเชฐเชคเซเช เชเซเช เชตเชฟเชถเชพเชณ เชชเชพเชฐเซเชธเชฐเซเชธ เชจเชฅเซ, เชเชฎเชพเชเชฅเซ เชเซเชเชจเซ เชเชฐเซเชฐ เชจเชฅเซ. เชชเซเชฐเชคเชฟเชญเชพเชต เชธเชฎเชฏ 200ms เชฅเซ เชเชเซเชจเซ 40-30ms เชฅเชฏเซ เชเซ. เช เชจเซ เชนเซเช เชเชเชฎเชพเชคเซเชฐ เชธเชพเชเซ เชจเชฟเชฐเซเชฃเชฏ เชชเชฐ เชเชตเซเชฏเซ.
Tcp เชชเชฐ เชตเชฐเซเชคเชฎเชพเชจ เชธเชฐเซเชตเชฐ เช เชฎเชฒเซเชเชฐเชฃเชจเซ เชซเซเชเชเซ เชฆเซ เช เชจเซ Http เชนเซเช เชณ เชฌเชงเซเช เชซเชฐเซเชฅเซ เชฒเชเซ. เชนเชตเซ เชชเซเชฐเซเชเซเชเซเช เชซเชฐเซเชฅเซ เชกเชฟเชเชพเชเชจ เชคเชฌเชเซเชเชพเชฎเชพเช เชเซ, เชชเชฐเชเชคเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเชพ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เช เชฒเช เชธเชฟเชฆเซเชงเชพเชเชคเซ เช เชจเซเชธเชพเชฐ. เชเชชเชเชฐเชฃเซ เช เชจเซ เชธเชพเชเชเชจเซเช เชธเชเชเชพเชฒเชจ เชธเชฎเชจเซเชตเชฏเชฟเชค เช เชจเซ เชกเซเชฌเช เชฅเชฏเซเชฒ เชเซ เช เชจเซ เชคเซเชจเซ เชเช เชธเชพเชฎเชพเชจเซเชฏ เชเซเชฏเชพเชฒ เชเซ, เชฎเชพเชคเซเชฐ เชเชเชฒเซ เช เชคเชซเชพเชตเชค เชเซ เชเซ เชเชชเชเชฐเชฃเซ เชฎเชพเชเซ HTML เชชเซเชทเซเช เซ เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชจเชฟเชทเซเชเชฐเซเชท
"เชเซ เชคเชฎเซ เชซเซเชฐเซเชกเชจเซ เชเชพเชฃเชคเชพ เชจเชฅเซ, เชคเซ เชชเชพเชฃเซเชฎเชพเช เชเชถเซ เชจเชนเซเช" เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ เชเชพเชฎ เชถเชฐเซ เชเชฐเชคเชพ เชชเชนเซเชฒเชพ, เชฎเชพเชฐเซ เชชเชพเชธเซ เชตเชงเซ เชธเซเชชเชทเซเช เชฐเซเชคเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชงเซเชฏเซเชฏเซ เช เชจเซ เชเชฆเซเชฆเซเชถเซเชฏเซ เชนเซเชตเชพ เชเซเชเช, เชคเซเชฎเช เชตเชฟเชตเชฟเชง เชเซเชฐเชพเชนเชเซ เชชเชฐ เชคเซเชฎเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชคเชเชจเซเชเซ เช เชจเซ เชชเชฆเซเชงเชคเชฟเชเชจเซ เช เชญเซเชฏเชพเชธ เชเชฐเชตเซ เชเซเชเช. เชชเซเชฐเซเชเซเชเซเช เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเซเชฃเชคเชพเชจเซ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชเชฆเชพเช เชนเซเช เชเซเชเชฒเซเช เชตเชธเซเชคเซเชเชจเซ เชซเชฐเซเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชธเชพเชเชตเซ เชคเซ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชตเชพ เชชเชพเชเซ เชเชตเซเชถ. เชตเชฟเชเชพเชธเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชนเซเช เชเชฃเซเช เชถเซเชเซเชฏเซ เชเซเช, เชชเชฐเชเชคเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เชนเชเซ เชชเชฃ เชเชฃเซเช เชถเซเชเชตเชพเชจเซเช เชเซ. เชเซ เชคเชฎเซ เชเชเชฒเซเช เชตเชพเชเชเซเชฏเซเช เชนเซเชฏ, เชคเซ เชเชฎ เชเชฐเชตเชพ เชฌเชฆเชฒ เชเชญเชพเชฐ.
เชธเซเชฐเซเชธ: www.habr.com

