Робота в асинхронному режимі з використанням cArchive.
Напишемо програму для обміну між клієнтом та сервером в асинхронному режимі з використанням CSocket та CArchive, наприклад з іменем MFCSocket2:
Виконуємо пункт 1 попереднього розділу.
Виконуємо п. 2 попереднього розділу, але не створюємо кнопку "Отримати":

Створюємо MFC-клас CMySock, похідний від CSocket. В ньому створюємо:
вказівник pWnd типу CWnd*, у якому буде зберігатись адреса об’єкту діалогового вікна;
функцію void SetWnd(CWnd *pWnd) для встановлення pWnd і в ній пишемо:
void CMySock::SetWnd(CWnd* pWnd)
{
this->pWnd=pWnd;
}
У класі CMySock створюємо обробник OnReceive, що викликається при отриманні сокетом повідомлення. Для того, щоб в обробнику можна було привести вказівник до типу діалогового вікна, переносимо опис обробника у кінець файлу MFCSocket2Dlg.cpp. В обробнику пишемо:
void CMySock::OnReceive(int nErrorCode)
{
(CMFCSocket2Dlg*)pWnd)->OnRecieve();
CSocket::OnReceive(nErrorCode);
}
У класі діалога створюємо дві змінних типу CMySock: ListenSock і Sock.
Повторюємо пункти 4-10 попереднього розділу.
У класі діалога створюємо функцію OnReceive і в ній пишемо:
void CMFCSocket2Dlg::OnRecieve(void)
{
CSocketFile f(&Sock);
CArchive ArIn(&f,CArchive::load);
ArIn>>sRMsg;
UpdateData(0);
}
Виконуємо пункти 12-14 попереднього розділу.
У функції OnInitDialog діалогового вікна додатково записуємо
ListenSock.SetWnd(this);
У вікні приймача з’являється текст отриманого повідомлення.
Виконуємо пункт 16 попереднього розділу.
Варіанти завдань
|
№ |
Кількість |
Режим сокета |
Операції | |||
|
сервер |
клієнт |
сервер |
клієнт |
сервер |
клієнт | |
|
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 |
синхр. |
асинхр. |
чит |
зап |
Завдання можуть змінюватись і доповнюватись викладачем.
