Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Внешний вид окна и начальные действия




Создание каркаса приложения

Создание сетевого приложения

Класс CAsyncSocket

Класс CAsyncSocket инкапсулирует асинхронные вызовы Winsock. Он содержит набор полезных функций, использующих Winsock API(табл.4.1).

 

Таблица 4.1

Методы класса CasyncSocket

Метод Назначение
Accept Обрабатывает запрос на соединение, который поступает на принимающий сокет, заполняя его информацией об адресе
AsyncSelect Организует посылку сообщения Windows при переходе сокета в состояние готовности
Attach Связывает дескриптор сокета с экземпляром класса CAsyncSocket, чтобы иметь возможность сформировать соединение с другим компьютером
Bind Ассоциирует адрес с сокетом
Close Закрывает сокет
Connect Подключает сокет к удаленному адресу и порту
Create Завершает процесс инициализации, начатый конструктором
GetLastError Возвращает код ошибки сокета
GetPeerName Определяет адрес IP и номер порта удаленного компьютера
GetSockName Возвращает адрес IP и номер порта объекта this
Listen Заставляет сокет следить за запросами на соединение
OnAccept Обрабатывает сообщение Windows, которое формируется при приеме гнездом запроса на соединение. Часто переопределяется в производных классах
OnClose Обрабатывает сообщение Windows, которое формируется при закрытии сокета. Часто переопределяется в производных класса
OnConnect Обрабатывает сообщение Windows, которое формируется после установки соединения или после неудачной попытки соединиться
OnReceive Обрабатывает сообщение Windows, которое формируется при появлении данных, которые можно прочесть с помощью Receive()
OnSend Обрабатывает сообщение Windows, которое формируется при готовности гнезда принять данные, посылаемые с помощью Send()
Receive Считывает данные с удаленного компьютера, к которому подключен сокет
Send Посылает данные удаленному компьютеру
SetSockOpt Устанавливает параметры сокета
ShutDown Оставляет сокет открытым, но предотвращает дальнейшие вызовы Send() или Receive()

 

В качестве примера сетевого приложения создадим диалоговое приложение, которое сможет работать либо в качестве сервера, либо в качестве клиента. Это позволит проверить созданное приложение, если запустить две копии приложения, по одной на каждом конце соединения. Эти две копии или могут быть расположены на одном компьютере, или же одна из копий может быть установлена на другом компьютере, тогда два приложения будут работать на различных компьютерах, передавая сообщения по сети. После этого можно проверить созданное приложение в работе. После того как между приложениями будет установлено соединение, можно передавать сообщения от одного приложения другому. После того как сообщение послано, оно будет добавлено в список переданных сообщений. В свою очередь каждое полученное сообщение будет помещено в список всех полученных сообщений. Это позволит затем сравнить списки полученных и посланных сообщений и убедиться, что они совпадают.

Создаем новый MFC-проект с помощью мастера приложений AppWisard и даем этому проекту имя, например, Sock. На первом шаге указывается, что приложение будет диалоговым, на втором шаге не забываем указать, что приложение будет использовать поддержку для Windows Socket. Далее выбираем кнопку Finish.

После того как создан каркас приложения, приступаем к созданию внешнего вида окна. Здесь нужно создать набор радиокнопок, с помощью которых можно установить параметры приложения, а именно, является ли данная копия приложения клиентской или серверной. Затем нам понадобится пара окон для редактирования текста, в которых мы будем указывать имя компьютера и номер порта, на котором будет слушать сервер. Нам нужна командная кнопка, которая будет заставлять сервер приступать к прослушиванию на сокете или же заставлять клиента устанавливать соединение с сервером, а также кнопка, которая позволит закрывать соединение. Кроме того, нам понадобится окно для редактирования текста, в которое мы будем вводить сообщение, предназначенное для передачи другому приложению, и кнопка, которая будет осуществлять такую передачу.

Наконец, нужно иметь пару окон для списка, в которые будут помещаться переданные и полученные сообщения. Расположим все эти элементы управления в соответствии с тем, как показано на рис.4.1, а свойства элементов управления зададим в соответствии с табл.4.2.

 

 
 

Рис.4.1. Расположение элементов управления

Таблица 4.2

Параметры элементов управления

Объект Свойства Значение
     
Group Box ID IDC_STATICTYPE
  Caption Socket Type
RadioButton ID IDC_RCLIENT
  Caption &Client
  Group Checked
RadioButton ID IDC_RSERVER
  Caption &Server
Static Text ID IDC_STATICNAME
  Caption Server &Name:
Edit Box ID IDC_ESERVNAME
Static Text ID IDC_STATICPORT
  Caption Server &Port:
Edit Box ID IDC_ESERVPORT
Command Button ID IDC_BCONNECT
  Caption C&onnect
Command Button ID IDC_BCLOSE
  Caption C&lose
  Disabled Checked
Static Text ID IDC_STATICMSG
  Caption &Message:
  Disabled Checked
Edit Box ID IDC_EMSG
  Disabled Checked
Command Button ID IDC_BSEND
  Caption S&end
  Disabled Checked
Static Text ID IDC_STATIC
  Caption Sent:
List Box ID
Окончание табл.4.2
IDC_LSENT

  Tab Stop Unchecket
     
  Selection None
Static Text ID IDC_STATIC
  Caption Received:
List Box ID IDC_LRECVD
  Tab Stop Unchecket
  Sort Unchecket
  Selection None

 

 

После того как основа диалогового окна сконструирована, открываем «Матер классов» и создаем переменные для элементов контроля в соответствии с переменными элементов управления (табл.4.3).

Таблица 4.3

Переменные элементов управления

Объект Имя Категория Тип
IDC_BCONNECT m_ctlConnect Control CButton
IDC_EMSG m_strMessage Value CString
IDC_ESERVNAME m_strName Value CString
IDC_ESERVPORT m_iPort Value int
IDC_LRECVD m_ctlRecvd Control CListBox
IDC_LSENT m_ctlSent Control CListBox
IDC_RCLIENT m_iType Value int

 

Чтобы иметь возможность использовать кнопку CONNECT повторно и поставить приложение-сервер "прослушивать" в ожидании соединения, нужно вставить функцию к радиокнопкам; текст, изображаемый на командной кнопке, зависит от того, какая выбрана радиокнопка. Чтобы вставить требуемую функцию, соответствующую сообщению о событии BN_CLICKED для идентификатора IDC_RCLIENT, используем имя функции OnRType. Вставим такую же функцию для события BN_CLICKED для элемента управления с идентификатором IDC_RSERVER. Функция имеет вид:

void CSockDlg::OnRType()

{

//Синхронизируем элементы управления в соответствии с переменными

UpdateDate(TRUE);

//В каком мы режиме?

if (m_iType == 0) //Устанавливаем текст на кнопке

m_ctlConnect.SetWindowText("C&onnect");

else

m_ctlConnect.SetWindowText("&Listen");}

Если сейчас скомпилировать и запустить приложение, можно будет выбирать режим работы приложения с помощью двух кнопок, а текст, появляющийся на командной кнопке, будет меняться в зависимости от того, какой установлен режим.





Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 416; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.