Лабораторная работа № 6
Тема: «Использование сокетов групповой рассылки»
Создадим приложение групповой рассылки и интерактивного форума, к которому могут обратиться несколько пользователей, чтобы отправить сообщение всем остальным клиентам. В этом приложении каждая станция действует и как клиент, и как сервер. Каждый пользователь может ввести сообщение, отправляемое всем участникам форума.
Строим следующую Windows –форму:

В таблице показаны основные элементы управления формы с их именами изначениями свойств по умолчанию:
Тип элемента | имя | Свойства |
Текстовое поле | textName | |
кнопка | buttonStart | |
кнопка | buttonStop | Enabled = “false” |
кнопка | buttonSend | Enabled = “false” |
Текстовое поле | textMessage | Multiline = true |
Текстовое поле | textMessages | Multiline = true ReadOnly = true Scrollbars = vertical |
Полоса состояния | statusBar |
using System. Collections. Specialized;

Групповые адреса и номера портов должны быть легко конфигурируемыми, поэтому создадим XML – файл конфигурирования приложения с именем MulticastChat. exe. config и следующим содержанием.

Этот конфигурационный файл нужно поместить в тот же каталог, где находится исполнимый файл.(Debug)

Для присоединения к группе, получающей рассылку, в обработчике щелчка по кнопке Старт считываем имя.

}
Получение сообщений, адресованных группе
В методе слушающего потока, который был создан раньше, ждём в методе cli-ent. Receive(), пока не поступит сообщение. С помощью класса UnicodeEncoding полученный массив байтов преобразуется в строку.
Теперь возвращаемое сообщение нужно отобразить в пользовательском интерфейсе. При пользовании потоков элементов управления Windows следует обращать внимание на один важный момент. В традиционной среде программирования Windows элементы управления Windows можно создавать из разных потоков, но лишь поток, создавший элемент управления, может вызывать в нём методы, поэтому все функции обработки элемента управления Windows должны вызываться в создавшем его потоке. Все методы управления Windows-форм должны вызываться на создающем потоке, за исключением метода Invoke()и его асинхронных версий BeginInvoke() и EndInvoke(). Эти методы можно вызывать из любого потока, поскольку они переадресуют вызываемый метод потоку, создавшему элемент управления Windows, а уже тот поток вызывает метод.
Поэтому вместо того, чтобы непосредственно отобразить сообщение в текстовом поле, вызываем метод Invoke() класса From. Поскольку этот же самый поток создал текстовое поле, он удовлетворяет всем требованиям.
Метод Invoke() требует параметра типа Delegate, и поскольку любой делегат порождён этим классом, то метод может быть передан в любой делегат. В среде. NET. Framework уже определён делегат для вызова метода без параметров: System. Windows. Forms. MehtodInvoker. Этот делегат принимает такие методы без параметров., как метод DisplayRecieviedMassege().



Запустите приложение на нескольких станциях.
САМОСТОЯТЕЛЬНО:
Выполнить задание преподавателя.


