Автор работы: Пользователь скрыл имя, 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
}
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)xTCPCl
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*>(
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