Стек протоколов TCP/IP. Передача данных по сети средствами стека протоколов TCP/IP. Основные принципы передачи данных по сети средствами стека протоколов TCP/IP, страница 3

using System.Windows.Forms;

using System.Net.Sockets;

using System.IO;

namespace server

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

TcpListener serverSocket;

TcpClient clientSocket;

private void Form2_Load(object sender, EventArgs e)

{

serverSocket = new TcpListener(65000);//порт

clientSocket = default(TcpClient);

serverSocket.Start();//слушает порт

clientSocket = serverSocket.AcceptTcpClient();//принимает запрос на подключение

//прием данных с клиента

byte[] bytesFrom = new byte[1024];//массив байтов

NetworkStream networkStream = clientSocket.GetStream();//объект для создания потока

BinaryReader binRead = new BinaryReader(networkStream); //объект для считывания потока с сервера

string dataFromClient = binRead.ReadString();// запись в строку данных с клиента

networkStream.Flush();//удаляет данные с потока

//посылает информацию клиенту

Matrix matrix = new Matrix();

matrix.ReadFromString(dataFromClient);//формируем интовую матрицу

label1.Text += "\n";

for (int k = 0; k < matrix.length; k++)

{

for (int j = 0; j < matrix.length; j++)

{

label1.Text += String.Format("{0,4:f2} ", matrix[k, j]);

}

label1.Text += "\n";

}

matrix.AntiMat();

string ForClient = "\n";

for (int k = 0; k < matrix.length; k++)

{

for (int j = matrix.length; j < matrix.length * 2; j++)

{

ForClient += String.Format("{0,4:f2} ", matrix[k, j]);

}

ForClient += "\n";

}

new BinaryWriter(networkStream).Write(ForClient);//посылаем результат клиенту

}

}

}

namespace server

{

class Matrix

{

private double[,] matrix;

public int length;

public double this[int i, int j]

{

get { return matrix[i, j]; }

set { matrix[i, j] = value; }

}

public int Count

{

get { return matrix.GetLength(0); }

}

public void CreateMatrix(int length)

{

matrix = new double[length, length*2];

}

public void ReadFromString(string data)

{

string[] rows = data.Split(';');

CreateMatrix(rows.Length - 1);

length = rows.Length - 1;

int ii = 0, jj = 0;

for (int i = 0; i < rows.Length; i++)

{

if (rows[i] != "")

{

string[] elem = rows[i].Split(' ');

jj = 0;

for (int j = 0; j < elem.Length; j++)

{

if (elem[j] != "")

{

matrix[ii, jj] = Convert.ToDouble(elem[j]);

jj++;

}

}

ii++;

}

}

}

public void AntiMat()

{

int k = length;

for (int i = 0; i < length; i++, k++)

{

matrix[i, k] = 1;

}

for (int l = 0; l < length - 1; l++)

{

for (int i = l + 1; i < length; i++)

{

double t = matrix[i, l] / matrix[l, l];

for (int j = l; j < length * 2; j++)

{

matrix[i, j] = matrix[i, j] - matrix[l, j] * t;

}

}

}

//второе преобразование

for (int l = length - 1; l > 0; l--)

{

for (int i = l - 1; i >= 0; i--)

{

double t = matrix[i, l] / matrix[l, l];

for (int j = l; j < length * 2; j++)

{

matrix[i, j] = matrix[i, j] - matrix[l, j] * t;

}

}

}

//финальное преобразование

k = 0;

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

{

double z = 1.0 / matrix[i, k];

for (int j = 0; j < length * 2; j++)

{

matrix[i, j] = matrix[i, j] * z;

}

k++;

}

}

public int Check(double[,] x, int n)

{

int d = 0;

for (int i = 0; i < n && d == 0; i++)

{

int count = 0;

for (int k = 0; k < n; k++)

if (x[i, k] == 0) count++;

if (count == n)

{

d = 1;

if (x[i, n] == 0) d = 2;

}

}

return d;

}

public int Rang()

{

int k = 0, i = 0;

double t = 0;

int n = Count;

for (k = 0; k < n - 1; k++)

for (int j = k + 1; j < n; j++)

{

t = matrix[j, k] / matrix[k, k];

for (i = 0; i < n; i++)

{

matrix[j, i] = matrix[k, i] * t - matrix[j, i];

}

}

int q = 0, h = 0, z = 0;

int s = 0;

for (s = 0; s < n; s++)

{

h = 0;

for (q = 0; q < n; q++)

{

if (matrix[s, q] != 0)

{

h++;

}

}

if (h > 0)

z++;

}

return z;

}

}

}

Скриншоты

1.png

Рисунок 1 – Пример работы программы

2.png

Рисунок 2 – Пример работы программы

3.png

Рисунок 3 – Пример работы программы

Выводы: Были получены навыки работы с Сокетами. Изучены методы передач данных между компьютерами по протоколу TCP/IP. Улучшены знания в области компьютерных сетей