Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППуКМ / Labs 1-7 / Лабораторна робота №6.doc
Скачиваний:
15
Добавлен:
18.03.2016
Размер:
303.62 Кб
Скачать
    1. Робота в асинхронному режимі з використанням cArchive.

Напишемо програму для обміну між клієнтом та сервером в асинхронному режимі з використанням CSocket та CArchive, наприклад з іменем MFCSocket2:

  1. Виконуємо пункт 1 попереднього розділу.

  2. Виконуємо п. 2 попереднього розділу, але не створюємо кнопку "Отримати":

  1. Створюємо MFC-клас CMySock, похідний від CSocket. В ньому створюємо:

    1. вказівник pWnd типу CWnd*, у якому буде зберігатись адреса об’єкту діалогового вікна;

    2. функцію void SetWnd(CWnd *pWnd) для встановлення pWnd і в ній пишемо:

void CMySock::SetWnd(CWnd* pWnd)

{

this->pWnd=pWnd;

}

    1. У класі CMySock створюємо обробник OnReceive, що викликається при отриманні сокетом повідомлення. Для того, щоб в обробнику можна було привести вказівник до типу діалогового вікна, переносимо опис обробника у кінець файлу MFCSocket2Dlg.cpp. В обробнику пишемо:

void CMySock::OnReceive(int nErrorCode)

{

(CMFCSocket2Dlg*)pWnd)->OnRecieve();

CSocket::OnReceive(nErrorCode);

}

  1. У класі діалога створюємо дві змінних типу CMySock: ListenSock і Sock.

  2. Повторюємо пункти 4-10 попереднього розділу.

  3. У класі діалога створюємо функцію OnReceive і в ній пишемо:

void CMFCSocket2Dlg::OnRecieve(void)

{

CSocketFile f(&Sock);

CArchive ArIn(&f,CArchive::load);

ArIn>>sRMsg;

UpdateData(0);

}

  1. Виконуємо пункти 12-14 попереднього розділу.

  2. У функції OnInitDialog діалогового вікна додатково записуємо

ListenSock.SetWnd(this);

  1. У вікні приймача з’являється текст отриманого повідомлення.

  2. Виконуємо пункт 16 попереднього розділу.

  1. Варіанти завдань

Кількість

Режим сокета

Операції

сервер

клієнт

сервер

клієнт

сервер

клієнт

1

1

1

синхр.

синхр.

чит/зап

чит/зап

2

1

2

синхр.

асинхр.

зап

чит

3

2

1

асинхр.

синхр.

чит

зап

4

2

2

асинхр.

асинхр.

чит/зап

чит/зап

5

1

1

синхр.

асинхр.

зап

чит

6

1

2

синхр.

синхр.

чит

зап

7

2

1

асинхр.

асинхр.

чит/зап

чит/зап

8

2

2

асинхр.

синхр.

зап

чит

9

1

1

асинхр.

асинхр.

чит

зап

10

1

2

асинхр.

синхр.

чит/зап

чит/зап

11

2

1

синхр.

синхр.

зап

чит

12

2

2

синхр.

асинхр.

чит

зап

13

1

1

асинхр.

синхр.

чит/зап

чит/зап

14

1

2

синхр.

асинхр.

зап

чит

15

2

1

асинхр.

асинхр.

чит

зап

16

2

2

синхр.

синхр.

чит/зап

чит/зап

17

1

1

синхр.

синхр.

зап

чит

18

1

2

асинхр.

синхр.

чит

зап

19

2

1

синхр.

асинхр.

чит/зап

чит/зап

20

2

2

асинхр.

асинхр.

зап

чит

21

1

1

синхр.

асинхр.

чит

зап

22

1

2

синхр.

синхр.

чит/зап

чит/зап

23

2

1

асинхр.

синхр.

зап

чит

24

2

2

асинхр.

асинхр.

чит

зап

25

1

1

асинхр.

асинхр.

чит/зап

чит/зап

26

1

2

синхр.

асинхр.

зап

чит

27

2

1

синхр.

синхр.

чит

зап

28

2

2

асинхр.

синхр.

чит/зап

чит/зап

29

1

1

асинхр.

синхр.

зап

чит

30

1

2

асинхр.

асинхр.

чит

зап

31

2

1

синхр.

асинхр.

чит/зап

чит/зап

32

2

2

синхр.

синхр.

зап

чит

33

1

1

синхр.

синхр.

чит

зап

34

1

2

асинхр.

синхр.

чит/зап

чит/зап

35

2

1

асинхр.

асинхр.

зап

чит

36

2

2

синхр.

асинхр.

чит

зап

Завдання можуть змінюватись і доповнюватись викладачем.