Лабораторная работа № 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().

Запустите приложение на нескольких станциях.

САМОСТОЯТЕЛЬНО:

Выполнить задание преподавателя.