Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
referat / Referat.doc
Скачиваний:
9
Добавлен:
28.06.2021
Размер:
569.86 Кб
Скачать

7.2 Исходный код второго сервера

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Net.Sockets;

using System.Threading;

using System.Net;

using Newtonsoft.Json;

using System.Diagnostics;

namespace Server

{

//Классы для отправки данных на клиент

[Serializable]

class OneProcInfo

{

public string Name;

public int priority;

public int[] threads;

public int[] threads_delta;

public OneProcInfo(int ID)

{

this.Name = "";

this.priority = 0;

Process process = Process.GetProcessById(ID);

ProcessThreadCollection arr = process.Threads;

this.threads = new int[arr.Count];

this.threads_delta = new int[arr.Count];

}

public void Fill(Process process)

{

this.Name = process.ProcessName;

this.priority = process.BasePriority;

ProcessThreadCollection arr = process.Threads;

for (int i = 0; i < arr.Count; i++)

{

this.threads[i] = arr[i].Id;

this.threads_delta[i] = arr[i].CurrentPriority - arr[i].BasePriority;

}

}

}

[Serializable]

class AllProcInfo

{

public OneProcInfo[] Processes { get; set; }

public int i { get; set; }

public void FillAll()

{

foreach (Process process in Process.GetProcesses())

this.i++;

this.Processes = new OneProcInfo[this.i];

int i = 0;

foreach (Process process in Process.GetProcesses())

{

this.Processes[i] = new OneProcInfo(process.Id);

this.Processes[i].Fill(process);

i++;

}

}

}

class ClientData

{

public Socket _clientSocket;

public Thread _clientThread;

public int id;

public ClientData()

{

Random rand = new Random(DateTime.Now.Millisecond);

id = rand.Next(1, 101);

_clientThread = new Thread(Server.Program.dataRecieve);

_clientThread.Start(_clientSocket);

}

public ClientData(Socket clientSocket)

{

Random rand = new Random(DateTime.Now.Millisecond);

id = rand.Next(1, 101);

Console.WriteLine("Client has connected");

this._clientSocket = clientSocket;

_clientThread = new Thread(Server.Program.dataRecieve);

_clientThread.Start(_clientSocket);

}

}

class Program

{

//Объявление слушающего сокета

static Socket listener;

static List<ClientData> _clients;

static void Main(string[] args)

{

Console.WriteLine("Starting server... ");

//Создание слушающего сокета

listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

_clients = new List<ClientData>();

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8888);

listener.Bind(ipEndPoint);

Thread listenThread = new Thread(ListenThread);

listenThread.Start();

}

//Функция, реализующая получение запроса от клиента и отправку данных клиенту

public static void dataRecieve(object cSocket)

{

//Создание сокета для нового подключения клиента

Socket clientSocket = (Socket)cSocket;

byte[] bufferIn;

byte[] bufferOut = new byte[1048576];

int readyBytes;

while(true)

{

//Считывание данных из сокета

bufferIn = new byte[clientSocket.SendBufferSize];

readyBytes = clientSocket.Receive(bufferIn);

//Обработка запроса и отправка данных клиенту

if (readyBytes > 0)

{

Console.WriteLine("Preparing to send data...");

//Создание объекта класса, содержащего необходимую информацию для клиента

AllProcInfo info = new AllProcInfo();

info.FillAll();

string serialize = JsonConvert.SerializeObject(info);

bufferOut = Encoding.Unicode.GetBytes(serialize);

//Отправка информации в сокет

clientSocket.Send(bufferOut);

Console.WriteLine("Client disconnected\n");

}

}

}

static void ListenThread()

{

while (true)

{

listener.Listen(10);

_clients.Add(new ClientData(listener.Accept()));

}

}

}

}

Соседние файлы в папке referat