Материал: Курсовая Рахимов Е.К. Бфи1901

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

catch (Exception ex)

{

mainTextBox1.Text += ex.Message + "\n";

}

}

private void button2_Click(object sender, EventArgs e)//connect 2 ser

{

ConServFitst();

}

public void ConServFitst()

{

address = "127.0.0.2";

port = 9305;

try

{

IPEndPoint ipPoint1 = new IPEndPoint(IPAddress.Parse(address), port);

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

// подключаемся к удаленному хосту

socket.Connect(ipPoint1);

string message = "GetPort!" + numb;

byte[] data = Encoding.Unicode.GetBytes(message);

socket.Send(data);

// получаем ответ

data = new byte[256]; // буфер для ответа

StringBuilder strBuilder = new StringBuilder();

int bytes = 0; // количество полученных байт

do

{

bytes = socket.Receive(data, data.Length, 0);

strBuilder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket.Available > 0);

port = int.Parse(strBuilder.ToString());

// закрываем сокет

mainTextBox1.Text += "Подключение открылось на порту : " + strBuilder.ToString() + "\n";

socket.Shutdown(SocketShutdown.Both);

socket.Close();

}

catch (Exception ex)

{

mainTextBox1.Text += ex.Message + "\n";

}

}

public void viklServ1()

{

address = "127.0.0.2";

port = 9305;

try

{

IPEndPoint ipPoint1 = new IPEndPoint(IPAddress.Parse(address), port);

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

// подключаемся к удаленному хосту

socket.Connect(ipPoint1);

string message = "brkpt!" + numb;

byte[] data = Encoding.Unicode.GetBytes(message);

socket.Send(data);

// получаем ответ

data = new byte[256]; // буфер для ответа

StringBuilder builder = new StringBuilder();

int bytes = 0; // количество полученных байт

do

{

bytes = socket.Receive(data, data.Length, 0);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket.Available > 0);

mainTextBox1.Text += "Подключение завершилось на порту : " + builder.ToString() + "\n";

// закрываем сокет

socket.Shutdown(SocketShutdown.Both);

socket.Close();

}

catch (Exception ex)

{

mainTextBox1.Text += ex.Message + "\n";

}

}

private void button3_Click(object sender, EventArgs e)//send 1

{

try

{

Serv2(address, port);

if (uslov.Equals("1байт") || uslov.Equals("1килобайт") || uslov.Equals("1мегабайт") || uslov.Equals("1гигабайт") || lastMSG.Equals(forset)) { } else {

mainTextBox1.Text += forset;

lastMSG = forset;

}

}

catch (Exception ex)

{

mainTextBox1.Text = ex.Message + "\n";

}

}

public void Serv2(string address1, int port1)

{

IPEndPoint ipPoint1 = new IPEndPoint(IPAddress.Parse(address1), port1);

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

string message;

byte[] data;

int bytes, siz;

StringBuilder builder = new StringBuilder();

// подключаемся к удаленному хосту

socket1.Connect(ipPoint1);

if (!takeTextBox2.Text.Equals(""))

{

switch (takeTextBox2.Text)

{

case "байт":

siz = 1;

break;

case "килобайт":

siz = 2;

break;

case "мегабайт":

siz = 3;

break;

case "гигабайт":

siz = 4;

break;

case "1байт":

siz = 5;

break;

case "1килобайт":

siz = 6;

break;

case "1мегабайт":

siz = 7;

break;

case "1гигабайт":

siz = 8;

break;

default:

siz = 1;

break;

}

data = Encoding.Unicode.GetBytes(siz +":");

socket1.Send(data);

int counter = 0;

if (siz >= 5) {

forset = "";

data = new byte[3024]; // буфер для ответа

bytes = 0; // количество полученных байт

do

{

bytes = socket1.Receive(data, data.Length, 0);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket1.Available > 0);

var dataForMem = builder.ToString().Split('!');

if (dataForMem.Length == 5)

{

mainTextBox1.Text += "Количество свободных байтов файла подкачки: " + dataForMem[0] + ". Объем используемой физической памяти в единицах, переданных клиентом : " + dataForMem[1] + ";" + "\n";

System.Threading.Thread.Sleep(2000);

mainTextBox1.Text += "\n" + "Новое значение - Количество свободных байтов файла подкачки: " + dataForMem[3] + ". Объем используемой физической памяти в единицах, переданных клиентом : " + dataForMem[4] + ";" + "\n";

uslov = takeTextBox2.Text;

}

else {

mainTextBox1.Text += "Значения не изменились";

// mainTextBox1.Text += "Количество свободных байтов файла подкачки: " + dataForMem[0] + ". Объем используемой физической памяти в единицах, переданных клиентом : " + dataForMem[1]+ ";" + "\n";

//uslov = takeTextBox2.Text;

}

}

else {

data = new byte[3024]; // буфер для ответа

bytes = 0; // количество полученных байт

do

{

bytes = socket1.Receive(data, data.Length, 0);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket1.Available > 0);

var dataForMem = builder.ToString().Split('!');

//mainTextBox1.Text += "Количество свободных байтов файла подкачки: " + dataForMem[0] + ". Объем используемой физической памяти в единицах, переданных клиентом : " + dataForMem[1]+ ";" + "\n";

forset = "Количество свободных байтов файла подкачки: " + dataForMem[0] + ". Объем используемой физической памяти в единицах, переданных клиентом : " + dataForMem[1] + "; " + "\n" ;

uslov = takeTextBox2.Text;

}

}

// закрываем сокет

socket1.Shutdown(SocketShutdown.Both);

socket1.Close();

}

private void button4_Click(object sender, EventArgs e)//send 2

{

try

{

Serv1(address, port);

}

catch (Exception ex)

{

mainTextBox1.Text = ex.Message + "\n";

}

}

private void Serv1(string address, int port)

{

IPEndPoint ipPoint1 = new IPEndPoint(IPAddress.Parse(address), port);

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

string message;

byte[] data;

int bytes;

StringBuilder builder = new StringBuilder();

int h= int.Parse(this.Size.Height.ToString());

int w= int.Parse(this.Size.Width.ToString());

// подключаемся к удаленному хосту

socket1.Connect(ipPoint1);

data = Encoding.Unicode.GetBytes(h +":" +w);

socket1.Send(data);

data = new byte[3024]; // буфер для ответа

bytes = 0; // количество полученных байт

do

{

bytes = socket1.Receive(data, data.Length, 0);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket1.Available > 0);

var dataForMem = builder.ToString().Split('!');

mainTextBox1.Text += "Размер клиентской области " + dataForMem[0] + " x "+ dataForMem[1] + "\nНазвание видеоадаптера -" + dataForMem[2] +" "+ DateTime.Now.ToString() + "; " + "\n";

// закрываем сокет

socket1.Shutdown(SocketShutdown.Both);

socket1.Close();

}

private void button5_Click(object sender, EventArgs e)//stop1

{

viklSer2();

}

private void button6_Click(object sender, EventArgs e)//stop2

{

viklServ1();

}

private void Form1_Load(object sender, EventArgs e)

{

if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)

{

Random rnd = new Random();

numb = rnd.Next(0, 100000);

}

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (checkBox1.Checked)

{

timer1.Enabled = true;

}

else

{

timer1.Enabled = false;

}

}

private void timer1_Tick(object sender, EventArgs e)

{

try

{

Serv2(address, port);

}

catch (Exception ex)

{

mainTextBox1.Text = ex.Message + "\n";

}

if (!forset.Equals(lastMSG)) {

mainTextBox1.Text += forset;

lastMSG = forset;

}

else

{

mainTextBox1.Text += "Нет изменений\n";

}

//mainTextBox1.Text += "lastMSG "+ lastMSG +" forset "+forset+" uslov "+ uslov ;

}

}

}

      1. Файл «Server2.Cs»

using System;

using System;

using System.Text;

using System.Net;

using System.Net.Sockets;

using System.Threading;

using System.Diagnostics;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using System.Security;

namespace Server1

{

class Program

{

static Dictionary<int, int> busyports = new Dictionary<int, int>();

static int port = 9306; // порт для приема входящих запросов

static int maxconnections = 5;

static void Main(string[] args)

{

if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length < 2)

{

Thread myThread1 = new Thread(osnova);

myThread1.Start();

for (int i = 0; i < maxconnections; i++)

{

Thread myThread = new Thread(new ParameterizedThreadStart(podkl));

myThread.Start(port + i);

}

}

}

static void osnova()

{

// получаем адреса для запуска сокета

IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9305);

// создаем сокет

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

try

{

// связываем сокет с локальной точкой, по которой будем принимать данные

listenSocket.Bind(ipPoint);

// начинаем прослушивание

listenSocket.Listen(10);

//DateTime.Now.ToShortTimeString()

while (true)

{

Socket handler = listenSocket.Accept();

// получаем сообщение

StringBuilder builder = new StringBuilder();

int bytes = 0; // количество полученных байтов

byte[] data = new byte[256]; // буфер для получаемых данных

do

{

bytes = handler.Receive(data);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (handler.Available > 0);

string message = "";

if (builder.ToString().Split('!')[0].Equals("GetPort"))

{

for (int i = 0; i < maxconnections; i++)

{

if (!busyports.ContainsValue(9306 + i))

{

if (busyports.ContainsKey(int.Parse(builder.ToString().Split('!')[1])))

{

int value = 0;

busyports.TryGetValue(int.Parse(builder.ToString().Split('!')[1]), out value);

message = value.ToString();

data = Encoding.Unicode.GetBytes(message);

handler.Send(data);

handler.Shutdown(SocketShutdown.Both);

handler.Close();

break;

}

busyports.Add(int.Parse(builder.ToString().Split('!')[1]), 9306 + i);

message = (9306 + i).ToString();

data = Encoding.Unicode.GetBytes(message);

handler.Send(data);

handler.Shutdown(SocketShutdown.Both);

handler.Close();

break;

}

}

}

else

{

try

{

int value = 0;

busyports.TryGetValue(int.Parse(builder.ToString().Split('!')[1]), out value);

message = value.ToString();

busyports.Remove(int.Parse(builder.ToString().Split('!')[1]));

data = Encoding.Unicode.GetBytes(message);

handler.Send(data);

handler.Shutdown(SocketShutdown.Both);

handler.Close();

}

catch

{

message = "error";

data = Encoding.Unicode.GetBytes(message);

handler.Send(data);

handler.Shutdown(SocketShutdown.Both);

handler.Close();

}

}

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

public class MemoryStatus

{

[return: MarshalAs(UnmanagedType.Bool)]

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]

internal static extern bool GlobalMemoryStatusEx([In, Out] MemoryStatus lpBuffer);

private uint dwLength;

public uint MemoryLoad;

public ulong TotalPhys;

public ulong AvailPhys;

public ulong TotalPageFile;

public ulong AvailPageFile;

public ulong TotalVirtual;

public ulong AvailVirtual;

public ulong AvailExtendedVirtual;

private static volatile MemoryStatus singleton;

private static readonly object syncroot = new object();

public static MemoryStatus CreateInstance()

{

if (singleton == null)

lock (syncroot)

if (singleton == null)

singleton = new MemoryStatus();

return singleton;

}

[SecurityCritical]

private MemoryStatus()

{

dwLength = (uint)Marshal.SizeOf(typeof(MemoryStatus));

GlobalMemoryStatusEx(this);

}

}

static void podkl(object x)

{

int port1 = (int)x;

// получаем адреса для запуска сокета

IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port1);

// создаем сокет

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

try

{

// связываем сокет с локальной точкой, по которой будем принимать данные

listenSocket.Bind(ipPoint);

// начинаем прослушивание

listenSocket.Listen(10);

//DateTime.Now.ToShortTimeString()

Console.WriteLine($"Сервер №{port1 - 9305} запущен, находится в ожидании подключений");

while (true)

{

Socket handler = listenSocket.Accept();

// получаем сообщение

StringBuilder builder = new StringBuilder();

int bytes = 0; // количество полученных байтов

byte[] data = new byte[3024]; // буфер для получаемых данных

Источник: https://studfile.net/preview/16556744/