Программирование на C++ глазами хакера


Пример работы UDP-клиента


Теперь опишу программу клиента, который будет отправлять данные на сервер. Создайте новый проект Win32 Project и назовите его UDPClient. В данном случае можно обойтись без дополнительных потоков и отправить данные прямо из функции _tWinMain. Это связано с тем, что передача по протоколу UDP не делает задержек, и данные могут отправляться практически мгновенно. Поэтому не имеет смысла делать многозадачное приложение, что значительно упрощает задачу.

Откройте файл UDPClient.cpp и перед циклом обработки событий напишите код из листинга 4.17.

Листинг 4.17. Отправка данных UDP-серверу
WSADATA wsd; if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) { MessageBox(0, "Can't load WinSock", "Error", 0); return 0; }

SOCKET sSocket; struct sockaddr_in servaddr; char szServerName[1024], szMessage[1024]; struct hostent *host = NULL;

strcpy(szMessage, "This is message from client"); strcpy(szServerName, "127.0.0.1");

sSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sSocket == INVALID_SOCKET) { MessageBox(0, "Can't create socket", "Error", 0); return 0; } servaddr.sin_family = AF_INET; servaddr.sin_port = htons(5050); servaddr.sin_addr.s_addr = inet_addr(szServerName);

if (servaddr.sin_addr.s_addr == INADDR_NONE) { host = gethostbyname(szServerName); if (host == NULL) { MessageBox(0, "Unable to resolve server", "Error", 0); return 1; } CopyMemory(&servaddr.sin_addr, host->h_addr_list[0], host->h_length); }

sendto(sSocket, szMessage, 30, 0, (struct sockaddr *)&servaddr, sizeof(servaddr));

Как и в случае с сервером, необходимо создать сокет, у которого в качестве второго параметра указано значение SOCK_DGRAM. Третий параметр определяет протокол, в данном случае это IPPROTO_UDP.

После этого заполняется переменная servaddr типа sockaddr_in, которая содержит адрес и порт компьютера, которому нужно отправить данные. Если в качестве адреса указано символьное имя, то оно преобразуется в IP-адрес так же, как и при ТСР-клиенте.




Начало  Назад  Вперед



Книжный магазин