- •Программирование электронных устройств
- •Содержание
- •1 Рекомендации по изучению дисциплины
- •Библиографический список
- •Контрольные вопросы
- •2 Программирование электронных устройств
- •2.1 Управляемые событиями программы
- •Контрольные вопросы
- •2.2 Визуализация цифровых данных
- •2.2.1 Вывод графической информации на дисплей
- •Int fnStyle;
- •If (g_pBrushes)
- •Void Diagram(hdc hDc, int X, int y, int r, bool fShadow, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •If (fShadow)
- •Void DiagramPie(hdc hDc, int X, int y, int r, float s, float e, int fnStyle, colorref clrref, const char* szLabel)
- •If (!szLabel)
- •Void ShadyDiagram(hdc hDc, int X, int y, int r, int iShadowDepth, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •Void winapi EndPaint( hwnd hWnd, paintstruct far *lpps);
- •Int winapi ReleaseDc( hwnd hwnd, hdc hdc );
- •Int fnStyle;
- •If (g_pBrushes)
- •Void ShadyDiagram(hdc hDc, int X, int y, int r, int iShadowDepth, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •Void DiagramPie(hdc hDc, int X, int y, int r, float s, float e, int fnStyle, colorref clrref, const char* szLabel);
- •Вывод графической информации на принтер
- •HDevMode – идентификатор глобального блока памяти, содержащего структуру типа devmode, которая используется для инициализации параметров принтера.
- •Контрольные вопросы
- •Организация интерфейса пользователя
- •Int wmId;
- •InvalidateRect(hWnd, null, true);
- •InvalidateRect(hWnd, null, true);
- •If (g_iShape)
- •Контрольные вопросы
- •2.4 Сетевое программирование
- •2.4.1 Сетевые модели, протоколы и архитектура «клиент – сервер»
- •Windows Sockets
- •If (gethostname(szInfo,sizeof(szInfo)))
- •Void Stop();
- •InvalidateRect(hWnd, null, true);
- •Void Stop()
- •If (wsaCleanup())
- •Void OnServerAccept(wparam, lparam);
- •InvalidateRect(hWnd, null, true);
- •Void OnServerAccept(wparam wParam, lparam lParam)
- •Int error, length;
- •If (wsagetasyncerror(lParam))
- •Контрольные вопросы
- •Основы технологии параллельных вычислений
- •Основы разработки и программирования простейших usb-устройств
- •Контрольные вопросы
- •Заключение
- •Программирование электронных устройств
- •445667, Г. Тольятти, ул. Белорусская, 14
Windows Sockets
Winsockили WindowsSockets– это интерфейс программирования приложений (API) созданный для реализации программ в сети на основе протоколов TCP/IP.
При взаимодействии «клиент – сервер» в сети каждого участника взаимодействия можно рассматривать как конечную точку или другими словами сокет. Windows Socketsразрабатывался на основе интерфейса Беркли для UNIX (илиBSDсокетов), но к ним добавлены функции поддержки событий Windows. Таким образом, несмотря на то, что рассмотрены только WindowsSockets, в целом программирование сокетов в UNIX системах и Windows похоже.
В настоящее время существует две основные версии WinsockAPI:
WinSock 1.1 – осуществляется поддержка только протоколов TCP/IP;
WinSock 2.0 – введена возможность работы с самыми разными сетевыми протоколами и моделями, например SPX/IPX.
Официальная спецификация Winsockразделяет функции на три типа:
функции Беркли;
информационные функции (получение информации о наименовании доменов, службах, протоколах Интернета);
расширения Windows для функций Беркли.
Все функции могут быть блокирующие и неблокирующие. Обычно блокирующие это функции Беркли. То есть при работе такой функции нельзя выполнять другие функции WinSock.
Код программы, осуществляющей инициализацию интерфейса WinsockAPI(WSA) и его деинициализацию следующий:
#include <stdio.h>
#include <winsock.h>
const int WINSOCK_VERSION = 0x0101;
void main()
{
WSADATA wsaData;
if (WSAStartup(WINSOCK_VERSION, &wsaData))
printf(“Winsock startup FAILED!\n”);
else
printf(“Winsock startup is successful.\n”);
if (WSACleanup())
printf(“Winsock cleanup FAILED!\n”);
else
printf(“Winsock cleanup is successful.\n”);
system(«pause»);
return;
}
Программа скомпилирована как консольный проект Win32. Для успешной линковки необходимо добавить в список зависимостей приложения файлwsock32.lib, входящий в состав любого современного компилятораC++ дляWindows.
С помощью #include <winsock.h>подключаются библиотечные функции. Далее объявляется константа с номером версии, с которой будет работать приложение – WINSOCK_VERSION.
Функция WSAStartup()инициализирует Winsock. Эта функция всегда вызывается самой первой при начале работы с Winsock. Ее прототип следующий:
int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);
Первый параметр – это версия, которая будет использоваться. Младший байт – основная версия, старший байт – расширение версии. То есть в примере, используется версия 1.1. Если инициализация состоялась, то вернется нулевое значение. Инициализация заключается в сопоставлении номера версии и реально существующей библиотеки динамической компоновки (файла с расширением DLL) в системной папке Windows.
Второй параметр – это указатель на структуру WSADATA, в которую возвратятся параметры инициализации. Структура имеет следующее определение:
typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
} WSADATA, FAR * LPWSADATA;
WSACleanup() завершает использование данного DLL файла и прерывает обращение к функциям Winsock. При удачном выполнении вернется ноль. Результат успешной работы программы приведен на рисунке 2.4.1.
Рисунок 2.4.1 – Инициализация и деинициализация WinsockAPI
В состав Winsockвходит ряд информационных функций, например, для получения сведений об имени компьютера в сети или IP – адреса. Рассмотрим простой пример, выводящий на экран имя локальной машины.
#include <stdio.h>
#include <winsock.h>
const int WINSOCK_VERSION = 0x0101;
void main()
{
char szInfo[BUFSIZ];
WSADATA wsaData;
if (WSAStartup(WINSOCK_VERSION, &wsaData))
printf(“Winsock startup FAILED!\n”);
else
printf(“Winsock startup is successful.\n”);