Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[MIT] / 14 steps.doc
Скачиваний:
17
Добавлен:
07.02.2016
Размер:
181.25 Кб
Скачать

Void cServerWinsock::SendData(lpctstr buf, int len)

{

if (send(clientsocket, buf, len, 0)==SOCKET_ERROR)

{

CString tmp;

tmp.Format("Sending Error! Code: %d", WSAGetLastError());

AfxMessageBox(tmp);

}

}

Після посилки даних сокет можна закрити.

Взагалі увесь даний процес з боку сервера можна уявити так:

socket()

bind()

WSAAsyncSelect()

listen()

If accept() send()

closesocket()

Крок 10 – Порядок байтів

Машини з різною архітектурою зберігають дані використовуючи різні порядки байтів. Наприклад, машини, які базуються на архітектурі Intel, зберігають дані у зворотному порядку у порівнянні з Макінтошами (Motorola). Порядок байтів фірми Intel називається “молодший - перший” і також являється зворотнім до мережного стандарту “старший - перший”. Наступна таблиця пояснить все це.

Порядок байтів “молодший – перший” та “старший – перший” у оперативній пам’яті

Порядок байтів

Значення

молодший – перший”

Найбільш вагомий байт знаходиться на правому кінці слова

старший – перший”

Найбільш вагомий байт знаходиться на лівому кінці слова

Звичайно, вам не треба перейматися порядком байтів для даних, які ви посилаєте та приймаєте по мережі, але є ситуації, в яких ви повинні перетворювати порядок байтів.

Коли Ви повинні перетворювати порядок байтів

Ви повинні перетворювати порядок байтів у наступних ситуаціях:

  • Ви передаєте інформацію, яка повинна бути інтерпретована мережею, у протилежність даним, які ви відсилаєте до іншої машини. Наприклад, Ви можете передавати номера портів та адреси, які мережа повинна розуміти.

  • Серверна програма, з якою ви зв’язуєтесь, не є програмою MFC (або у вас нема тексту цієї програми). Це закликає до перетворень порядку байтів, якщо ці дві машини мають неоднаковий порядок байтів.

Коли Вам не потрібно перетворювати порядок байтів

Ви можете уникнути роботи по перетворенню порядку байтів у наступних ситуаціях:

  • Машини на обох кінцях можуть домовитися не переставляти байти або ці машини використовують однаковий порядок байтів.

  • Сервер, з яким Ви зв’язуєтесь, є програмою MFC.

  • Ви маєте тексти програм для сервера, з яким ви зв’язуєтесь, так що Ви можете явно вказати, де повинен перетворюватися порядок байтів, а де – ні.

  • Ви можете переписати сервер на MFC.

Це зазвичай дуже легко зробити, і результатом буде менший та більш швидкий код.

Функції перетворення порядку байтів у Windows Sockets

Функція

Призначення

ntohs

Конвертує 16-бітне слово з мережного порядку байтів до порядку байтів хоста

ntohl

Конвертує 32-бітне слово з мережного порядку байтів до порядку байтів хоста

htons

Конвертує 16-бітне слово з порядку байтів хоста до мережного порядку байтів

htonl

Конвертує 32-бітне слово з порядку байтів хоста до мережного порядку байтів

Ми користувалися цими функціями при виклику bind.

BOOL CServerWinsock::BindSocket()

{

SOCKADDR_IN socketaddr;

socketaddr.sin_family = AF_INET;

socketaddr.sin_addr.s_addr = INADDR_ANY;

socketaddr.sin_port = htons(PORT_ADDR);

Соседние файлы в папке [MIT]