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

7 Приложение

7.1 Исходный код первого сервера

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Net;

using System.Net.Sockets;

using System.Threading.Tasks;

using Newtonsoft.Json;

namespace server2

{

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

[Serializable]

class Upt

{

public string _localtime { get; set; }

public string _uptime { get; set; }

public Upt(string localtime,string uptime)

{

this._localtime = localtime;

this._uptime = uptime;

}

}

class ClientData

{

public Socket _clientSocket;

public Thread _clientThread;

public int id;

public ClientData()

{

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

id = rand.Next(101, 1001);

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

_clientThread.Start(_clientSocket);

}

public ClientData(Socket clientSocket)

{

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

id = rand.Next(1, 101);

Console.WriteLine("Client {0} has connected", id);

this._clientSocket = clientSocket;

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

_clientThread.Start(_clientSocket);

}

}

class Program

{

static DateTime _uptime;

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

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>();

_uptime = DateTime.Now;

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

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[64];

int readyBytes;

while (true)

{

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

bufferIn = new byte[clientSocket.SendBufferSize];

readyBytes = clientSocket.Receive(bufferIn);

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

if (readyBytes > 0)

{

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

string ldt = DateTime.Now.ToString();

string uptime = _uptime.Subtract(DateTime.Now).ToString();

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

Upt info = new Upt(ldt, uptime);

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