ПО для рассылки и получения новостей

Автор работы: Пользователь скрыл имя, 17 Июня 2013 в 00:52, курсовая работа

Описание работы

Активно внедряя автоматизацию в сферу рассылки и получения новостей, руководство Министерства информации четко определило главную цель: повышение качества и уровня доставки информации, создание оптимальных условий для получения информации к пользователю. Успех в этой работе во многом зависит от того, насколько технологически грамотно весь этот сложный программно-технический комплекс будет использован для главной цели его создания – эффективной рассылки и получения новостей посредством технологии клиент – сервер на основе WINDOWS SOCKETS используя API функции.
Целью данной работы является составление программного обеспечения для рассылки и получения.

Содержание работы

Введение………………………………………….……………………………………41 Обзор состояния вопроса ель и задачи работы…………….……………………...5
2 Постановка задачи………………………………………………….………..……...7
3 Моделирование ПО……………………………….………………………………...8
3.1 Архитектура ПО…………………………….…………………………………..8
3.2 Интерфейс пользователя………………………………………………………11
3.3 Описание основных функциональных модулей……………………………..14
3.4 Структура классов и объектов………………………………………………...24
4 Реализация ПО……………………………………………………………………..28
5 Руководство пользователя………………………………...………………………29
Заключение…………………………...………………………………………………34Список используемой литературы…………………………………………...……..35

Файлы: 1 файл

курсовой_проект.doc

— 539.00 Кб (Скачать файл)

}

 

int size    = sizeof(int);

int bufsize = 0;

 

if(getsockopt(client, SOL_SOCKET, SO_RCVBUF, (char*)&bufsize, &size) != SOCKET_ERROR) {

if(bufsize < BUFSIZE)

bufsize = BUFSIZE;

setsockopt(client, SOL_SOCKET, SO_RCVBUF, (const char*)&bufsize, sizeof(int));

}

}

if(getsockopt(client, SOL_SOCKET, SO_SNDBUF, (char*)&bufsize, &size) != SOCKET_ERROR) {

if(bufsize < BUFSIZE) {

bufsize = BUFSIZE;

setsockopt(client, SOL_SOCKET, SO_SNDBUF, (const char*)&bufsize, sizeof(int));

}

}

 

int res = connect(client, (const sockaddr*)&addr, sizeof(addr));

if(res == SOCKET_ERROR) {

err = WSAGetLastError();

return FALSE;

}

 

thread = CreateThread(NULL, 0u, (LPTHREAD_START_ROUTINE)xTCPClient::ThreadReader, (LPVOID)this, CREATE_SUSPENDED, NULL);

if(thread == NULL) {

           err = GetLastError();

   return FALSE;

}

loop   = TRUE;

reader = on_read;

error  = on_error;

ResumeThread(thread);

return TRUE;

}

 

bool   Send(const CHAR* buf, int& err) {

if(send(client, buf, min(lstrlenA(buf), BUFSIZE - 1), 0) == SOCKET_ERROR) {

err = WSAGetLastError();

return false;

}

return true;

}

 

void   Close(void) {

loop = FALSE;

if(thread != NULL) {

            if(WaitForSingleObject(thread, 1000u) == WAIT_TIMEOUT)

TerminateThread(thread, 0u);

CloseHandle(thread);

}

thread = NULL;

 

if(client != 0u)

closesocket(client);

client = 0u;

}

 

void   Wait(void) {

       if(thread != NULL)

   WaitForSingleObject(thread, INFINITE);

static  bool  Init(void) {

WSADATA  data;

ZeroMemory(&data, sizeof(WSADATA));

if(WSAStartup(MAKEWORD(2, 2), &data) != 0)

return false;

return true;

}

 

static void Free(void) {

        WSACleanup();

}

 

private:

 

// Ïðèâàòíûé ñòàòè÷åñêèé ìåòîä ïîòîêà, äëÿ ïðèíÿòèé äàííûõ îò ñåðâåðà

static  DWORD  WINAPI  ThreadReader(LPVOID  param) {

xTCPClient*  ptr = reinterpret_cast<xTCPClient*>(param);

int  result;

CHAR buf[BUFSIZE];

 

while(ptr->loop) {

 

result = recv(ptr->client, buf, BUFSIZE - 1, 0);

 

if(result > 0) {

 

buf[result] = '\0';

if(ptr->reader != NULL)

(*ptr->reader)(buf, result);

 

} else {

 

                if(ptr->error != NULL)

(*ptr->error)(WSAGetLastError());

 

if(result == SOCKET_ERROR)

break;

 

}

}

return 0u;

}

 

};

 

 

 

 

 

#endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 




Информация о работе ПО для рассылки и получения новостей