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


Пример работы ТСР-сервера


Начну с разработки сервера. Создайте новый проект Win32 Project с именем TCPServer. Откройте файл TCPServer.cpp и после объявления всех глобальных переменных, но до функции _twinMain, напишите две процедуры из листинга 4.12. Функции должны быть именно в таком порядке: сначала ClientThread, а затем — NetThread.

Листинг 4.12. Функции работы с сетью
DWORD WINAPI ClientThread(LPVOID lpParam) { SOCKET sock=(SOCKET)lpParam; char szRecvBuff[1024], szSendBuff[1024]; int ret; // Запуск бесконечного цикла while(1) { // Получение данных ret = recv(sock, szRecvBuff, 1024, 0); // Проверка полученных данных if (ret == 0) break; else if (ret == SOCKET_ERROR) { MessageBox(0, "Recive data filed", "Error", 0); break; } szRecvBuff[ret] = '\0';

// Здесь можно поставить проверку принятого текста // в переменной szRecvBuffer

// Подготовка строки для отправки клиенту strcpy(szSendBuff, "Command get OK");

// Отправка содержимого переменной szSendBuff клиенту ret = send(sock, szSendBuff, sizeof(szSendBuff), 0); if (ret == SOCKET_ERROR) { break; } } return 0; }

DWORD WINAPI NetThread(LPVOID lpParam) { SOCKET sServerListen, sClient; struct sockaddr_in localaddr, clientaddr; HANDLE hThread; DWORD dwThreadId; int iSize;

// Создание сокета sServerListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (sServerListen == SOCKET_ERROR) { MessageBox(0, "Can't load WinSock", "Error", 0); return 0; } // Заполнение структуры localaddr типа sockaddr_in localaddr.sin_addr.s_addr = htonl(INADDR_ANY); localaddr.sin_family = AF_INET; localaddr.sin_port = htons(5050);

// Связывание адреса с переменной localaddr типа sockaddr_in if (bind(sServerListen, (struct sockaddr *)&localaddr, sizeof(localaddr)) == SOCKET_ERROR) { MessageBox(0, "Can't bind", "Error", 0); return 1; }

// Вывод сообщения об удачной операции bind MessageBox(0, "Bind OK", "Error", 0);

// Запуск прослушивания порта listen(sServerListen, 4);

// Вывод сообщения об удачном начале операции прослушивания MessageBox(0, "Listen OK", "Error", 0);




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



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