
- •Федеральное агентство связи
- •Московский технический университет связи и информатики
- •1 Задание
- •2 Содержание Оглавление
- •3 Введение
- •4 Основная часть
- •4.1 Задачи курсовой работы
- •4.2 Краткие теоретические основы разрабатываемой темы
- •4.2.1 Межпроцессное взаимодействие. Сокеты
- •4.2.2 Средства синхронизации процессов
- •4.3 Разработка и описание алгоритма работы приложения
- •4.5 Руководство пользователя
- •4.6 Демонстрация программы
- •5 Заключение
- •6 Список использованных источников
- •7 Приложение
- •7.1 Исходный код первого сервера
- •7.2 Исходный код второго сервера
- •7.3 Исходный код клиента
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()));
}
}
}
}