Послідовність операцій для зв'язку потокового сокета
|
Сервер |
Клієнт |
|
// Створити слухаючий сокет CSocket ListenSock; |
// Створити сокет CSocket Sock; |
|
// Створити об’єкт сокета ListenSock.Create(nPort); // Почати прослуховування ListenSock.Listen(); |
// Створити об’єкт сокета Sock.Create(); |
|
|
// Підключити сокет Sock.Connect(sAddr, nPort); |
|
// Створити новий пустий сокет CSocket Sock; // Прийняти з’єднання ListenSock.Accept (Sock); |
|
|
// Створити об’єкт файлу CSocketFile file(&Sock); |
// Створити об’єкт файлу CSocketFile file (&Sock); |
|
//Створити архів CArchive arIn (&file, CArchive::load); або CArchive arOut (&file, CArchive::store); або обидва |
// Створити архів CArchive arIn (&file, CArchive::load); або CArchive arOut (&file, CArchive:: store); - або обидва |
|
// Використати архів для передачі даних: агIn>>dwValue; або arOut>>dwValue; |
// Використати архів для передачі даних: агIn>>dwValue; або arOut>>dwValue; |
Хід виконання роботи
Робота у синхронному режимі з використанням cArchive
Напишемо програму для обміну між клієнтом та сервером у синхронному режимі з використанням CSocket та CArchive:
Створюємо діалогову програму з іменем MFCSocket1 і задаємо режим підтримки сокетів:

Проектуємо вид діалогового вікна:

В класі CMFCSocket1Dlg створюємо дві змінні ListenSock та Sock типу CSocket.
Радіо кнопку «Сервер» робимо груповою (встановлюємо властивість Group)
Створюємо зв’язані змінні:
int iMode для радіокнопки “Сервер”;
CString sAdr для поля введення адреси;
UINT iPort для поля введення порта;
CButton butLsn для кнопки “Слухати”;
CString sSMsg для поля введення повідомлення, що відсилається;
CString sRMsg для статичного поля прийнятого повідомлення.
В функції OnInitDialog() класу CMFCSocket1Dlg пишемо:
iMode=0;
sAdr="loopback";
iPort=4444;
UpdateData(0);
Для радіокнопки “Сервер” створюємо обробник OnSrv() і в ньому пишемо:
void CMFCSocket1Dlg::OnSrv()
{
butLsn.SetWindowText("Слухати");
}
Для радіокнопки “Клієнт” створюємо обробник OnCln() і в ньому пишемо:
void CMFCSocket1Dlg::OnCln()
{
butLsn.SetWindowText("З’єднати");
}
Для кнопки “Слухати” створюємо обробник OnBlsn() і в ньому пишемо:
void CMFCSocket1Dlg::OnBlsn()
{
UpdateData(1);
if(iMode==0)
{
ListenSock.Create(iPort);
ListenSock.Listen();
ListenSock.Accept(Sock);
}
else
{
Sock.Create();
Sock.Connect(sAdr,iPort);
}
}
Для кнопки “Відправити” створюємо обробник OnBSend() і в ньому пишемо:
void CMFCSocket1Dlg::OnBSend()
{
UpdateData(1);
CSocketFile f(&Sock);
CArchive arOut(&f,CArchive::store);
arOut<<sSMsg;
}
Для кнопки “Отримати” створюємо обробник OnBRecv() і в ньому пишемо:
void CMFCSocket1Dlg::OnBRecv()
{
CSocketFile f(&Sock);
CArchive arIn(&f,CArchive::load);
arIn>>sRMsg;
UpdateData(0);
}
Якщо на комп’ютері включено БРАНДМАУЕР, то відключаємо його.
Запускаємо на виконання два екземпляри програми. В одній включаємо режим “Сервер”, а в другій - “Клієнт”. Спочатку на сервері натискаємо кнопку “Слухати”, потім на клієнті натискаємо кнопку “З’єднати”.
Тепер можна отримувати і відправляти дані. Для цього спочатку на передавачі вводимо текст і натискуємо кнопку “Відправити”.
Потім на приймачі натискуємо кнопку "Отримати". Отриманий текст з’являється вікні приймача.
Для обміну на різних комп’ютерах необхідно в клієнті ввести адресу сервера або його ім’я.
