Информационно-вычислительная сеть на основе архитектуры "клиент-сервер", предметная область: "Магазин бытовой техники"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
)
// попытаться получить адрес клиента
cout<<"accepted connection from "<<inet_ntoa(sa.sin_addr)<<endl;
*/
// запустить в отдельной нити функцию обслуживания клиента
if(!AfxBeginThread(ConnectHandler, (void*) newSocket))
{
//cout<<endl<<"_beginthread(...) error "<<errno<<endl;(MySocket);0;
}
}(MySocket);0;
}ConnectHandler( LPVOID pParam)
{s = (SOCKET) pParam;// гнездо, с которым будет вестись
обменbuf[500], // буферы для данных[500], // буфер для шифрованного текста
pwd[21]; // пароль
char len[4];str;n, nFields;(pwd, password.operator LPCTSTR(), 20);
recv(s, len, sizeof len, 0); // прием данных от клиента= recv(s, encrypted, (int) len, 0); // прием данных от клиента
crypt(encrypted, buf, pwd, n);(n < 1) {(s); // закрытие гнезда0;
Open(AFX_DB_USE_DEFAULT_TYPE,buf);=pLipRec->GetODBCFieldCount();(n!=0||nFields>0){(s,(char*)&nFields,sizeofnFields,0);(inti=0;iGetODBCFieldInfo(i, LipField);= crypt(LipField.m_strName.operator LPCTSTR(),, pwd, LipField.m_strName.GetLength() + 1);(s, (char*)&n, sizeof n, 0);(s, encrypted, n, 0);
}>MoveFirst();(!pLipRec->IsEOF())
{(int i = 0; i < nFields; i++)
GetFieldValue(i,str);=crypt(str,encrypted,pwd,str.GetLength()+1);(s,(char*)&n,sizeofn,0);(s,encrypted,n,0);">{>GetFieldValue(i, str);= crypt(str, encrypted, pwd, str.GetLength() + 1);(s, (char*)&n, sizeof n, 0);(s, encrypted, n, 0);
}>MoveNext( );(!pLipRec->IsEOF())[0] = 1;[0] = 0;(s, len, 1, 0);
}>Close();
}{= 0;(s, (char*)&nFields, sizeof nFields, 0);
}= false;(s, len, sizeof len, 0); // прием данных от клиента= recv(s, encrypted, (int) len, 0); // прием данных от клиента(encrypted, buf, pwd, n);
} while (n > 0);(s); // закрытие гнезда0;
}
#include "stdafx.h"
#include "crypt.h"
#include
// функция преобразования строки пароля в гамму шифра
unsigned long gamma(char *pwd)
{buf[20];i;long flag;unsigned long g;(pwd) {(buf, 0x55, 20);// UUUUUUUUUUUUUUUUUUUU(buf, pwd, strlen(pwd));// passwordUUUUUUUUUUUU(i = 0, g = 0; i < 20; i++)// свертка пароля+= (unsigned long) (buf[i] << (i % 23));
}(i = 5; i > 0; i--) { // циклический сдвиг на 5 разрядов вправо
flag = g & 1;= g >> 1;(flag)
g |= 0x80000000;
}g; // возвратить значение гаммы
}
// шифрует открытый текст source по паролю pwd
// и записывает шифрованный текст в dest
// шифрование симметричноеcrypt(const char *source, char *dest, char *pwd, int len)
{, nBlocs;long *pSrc, *pDst, g;= (unsigned long *) source;= (unsigned long *) dest;
g = gamma(pwd);// получить гамму шифра= (len + 1) / 4 + 1; // сосчитать число 32-разрядных блоков
for(i = 0; i < nBlocs; i++, pDst++, pSrc++) // цикл гаммирования
открытого
*pDst = *pSrc ^ gamma(0); // текста блоками по 32 бита[nBlocs * 4] = 0;// вставить завершающий символ 0nBlocs * 4 + 1;// возвратить число байт в зашифрованном тексте
}
Приложение Клиент
#include "stdafx.h"
#include "llip_client.h"
#include "MainFrm.h"
#include "llip_clientDoc.h"
#include "llip_clientView.h"
#include "PropDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILEchar THIS_FILE[] = __FILE__;
#endif_MESSAGE_MAP(CLlip_clientApp, CWinApp)
//{{AFX_MSG_MAP(CLlip_clientApp)_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)_MESSAGE_MAP()_clientApp::CLlip_clientApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}_clientApp theApp;CLlip_clientApp::InitInstance()
{short port; // порт сервераlong addr; // адрес сервераd(NULL);(d.DoModal() == IDOK) {= d.m_port;(m_pwd, d.m_pwd.operator LPCTSTR(), 20);= *((unsigned long*) d.m_addr);
}false;(!AfxSocketInit())
{(IDP_SOCKETS_INIT_FAILED);FALSE;
}
#ifdef _AFXDLLdControls();// Call this when using MFC in a shared DLL
#elsedControlsStatic();// Call this when linking to MFC statically
#endif(_T("Local AppWizard-Generated Applications"));(0); // Load standard INI file options (including )* pDocTemplate;= new CSingleDocTemplate(_MAINFRAME,_CLASS(CLlip_clientDoc),_CLASS(CMainFrame), // main SDI frame window_CLASS(CLlip_clientView));(pDocTemplate);
// Parse command line for standard shell commands, DDE, file opencmdInfo;(cmdInfo);
// Dispatch commands specified on the command line(!ProcessShellCommand(cmdInfo))FALSE;
ShowWindow(SW_SHOW);_pMainWnd->UpdateWindow();r;_pMainWnd->GetWindowRect(&r);.right = r.left + 500;.bottom = r.top + 380;_pMainWnd->MoveWindow(&r);">// The one and only window has been initialized, so show and update it._pMainWnd->ShowWindow(SW_SHOW);_pMainWnd->UpdateWindow();r;_pMainWnd->GetWindowRect(&r);.right = r.left + 500;.bottom = r.top + 380;_pMainWnd->MoveWindow(&r);
sockaddr_in sa;// структура данных гнезда
s = socket(AF_INET, SOCK_STREAM, 0);// создать гнездо(s == INVALID_SOCKET)
{(NULL, "Socket error.", "Ошибка", MB_OK);0;
}(addr == INADDR_NONE) // при ошибке
{(NULL, "Invalid IP address.", "Ошибка", MB_OK);(s);0;
}.sin_family = AF_INET;// заполнить структуру данных гнезда.sin_port = htons(port);.sin_addr.s_addr = addr;
// установить соединение:(connect(s, (sockaddr*)&sa, sizeof(sa)) == SOCKET_ERROR)
{(NULL, "Connect error.", "Ошибка", MB_OK);(s);0;
}TRUE;
}CAboutDlg : public CDialog
{:();
// Dialog Data
//{{AFX_DATA(CAboutDlg){ IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg):void DoDataExchange(CDataExchange* pDX); // DDX/DDV
//}}AFX_VIRTUAL
// Implementation:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG_MESSAGE_MAP()
};::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}CAboutDlg::DoDataExchange(CDataExchange* pDX)
{::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP_MESSAGE_MAP()
// App command to run the dialogCLlip_clientApp::OnAppAbout()
{aboutDlg;.DoModal();
}CLlip_clientApp::ExitInstance()
{(s); // закрыть гнездоCWinApp::ExitInstance();}
Приложение Б (обязательное)
Диаграммы
Рисунок 7. (приложение Б) - диаграмма вариантов использования
аб
Рисунок 8(приложение Б) - диаграмма деятельности: а - сервер, б - клиент
Рисунок 9 (приложение Б) - диаграмма развертывания
Рисунок 10 (приложение Б) - диаграмма последовательности
Приложение В
Электрическая структурная схема вычислительной сети
Рисунок 11 (Приложение Б) - структурная схема сети