Серверная часть

// Настройка серверного приложения, принимающего пакеты информации от клиента и

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

using System;

using System.Drawing;

using System.Collection;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Net;

using System.Net.Sockets;

using System.Threading;

// Создание сервера UDP

public class Server: System.Windows.Forms.Form

{

TextBox displayTextBox;

UdpClient client;

IPEndPoint receivePoint;

Container components = null;

public Server() // Конструктор по умолчанию

{

InitializeComponent();

client = new UdpClient(5000);

receivePoint = new IPEndPoint(new IPAddress(0), 0);

Thread readThread = new Thread(new ThreadStart(WaitForPackets));

readThread.Start();

}

// Код сгенерированный Visual Studio.NET

[STAThread]

static void Main(){ Application.Run(new Server)); }

// Закрытие сервера

protected void Server_Closing(object sender, CancelEventArgs e)

{ Environment.Exit(Environment.ExitCode)); }

// Ожидание поступления пакета

public void WaitForPackets()

{

while(true)

{

// Получение массива байтов от клиента

byte[] data = client.Receive(ref receivePoint);

// Вывод потоковых данных в TextBox

displayTextBox.Text += "\r\nПакет принят:" +

System.Text.Encoding.ASCII.GetString(data);

displayTextBox.Text +="\r\n\r\nВозвращение данных обратно клиенту";

// Возвращение информации обратно клиенту

client.Send(data,data.Length, receivePoint);

displayTextBox.Text +="\r\nПакет отослан обратно клиенту"

}

}

}

Представленный код определяет класс приложения сервера. В его конструкторе создается экземпляр класса UdpClient, принимающий данные с порта 5000. При этом инициализируется базовый сокет для соединения и создается экземпляр класса IPEndPoint для сохранения IP -адреса и номера порта клиента, осуществляющего передачу данных на сервер. Первый аргумент конструктора класса IPEndPoint – это объект IPAddress, а второй – для номера порта конечной точки соединения. Оба эти значения равны 0, потому что необходимо создать пустой объект IPEndPoint. IP-адреса и номера портов клиентов копируются в объект класса IPEndPoint при получении дэйтаграммы от клиентов.

Метод WaitForPackets() класса сервера выполняет бесконечный цикл, ожидая поступления данных на сервер. При их поступлении метод Receive () класса UdpClient получает от клиента информацию в виде массива байтов. В качестве аргумента в этот метод включен объект receivePoint типа IPEndPoint, созданный в конструкторе. Это обеспечивает данный метод ссылкой на объект, в котором программа копирует IP-адрес и номер клиента. После чего обновляется содержимое текстового поля на форме клиента, а полученные данные с помощью метода UdpClient.Send () отсылаются обратно клиенту. Данная версия этого метода принимает три аргумента: массив байтов для отправки, его размер и объект receivePoint типа IPEndPoint, представляющий собой место назначения данных. Программа скомпилируется и будет выполняться, даже если ссылка на объект receivePoint будет иметь значение null.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: