Разработка приложений по технологии "клиент-сервер"
Характеристика модели клиент-сервер как технологии взаимодействия в информационной сети. Разработка и описание алгоритмов работы приложений на платформе Win32 в среде Microsoft Visual Studio, использующих для межпроцессного взаимодействия сокеты.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 02.06.2014 |
Размер файла | 544,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
664. }
Приложение В
Распечатка программы клиента 2
665. // Клиент2.cpp: определяет точку входа для приложения.
666. //
667. #include "stdafx.h"
668. #include "Клиент2.h"
669. #include <winsock.h>
670. #include <process.h>
671. #include <stdio.h>
672. #include <windows.h>
673. #include <tchar.h>
674. #include <string.h>
675. #include <iostream>
676. char szBuf[512];
677. DWORD cbWritten;
678. int flag = 0;
679. static HWND hwndEdit;
680. TCHAR mess[2048];
681. TCHAR* m_mess = mess;
682. #define SERV_PORT 5000// Порт сервера
683. #define WSA_NETEVENT (WM_USER+1)
684. WSADATA wsaData; //сведения о конкретной реализации интерфейса Windows Sockets
685. WORD wVersionRequested = MAKEWORD( 1, 1 ); //Номер требуемой версии Windows Sockets
686. int err=0;
687. SOCKET cln_socket=INVALID_SOCKET; // Сокет сервера
688. static PHOSTENT phe;
689. SOCKADDR_IN dest_sin; // Адрес сервера
690. char szHostName[128] = "localhost"; //имя хоста
691. #define MAX_LOADSTRING 100
692. // Глобальные переменные:
693. HINSTANCE hInst;// текущий экземпляр
694. TCHAR szTitle[MAX_LOADSTRING];// Текст строки заголовка
695. TCHAR szWindowClass[MAX_LOADSTRING];// имя класса главного окна
696. // Отправить объявления функций, включенных в этот модуль кода:
697. ATOMMyRegisterClass(HINSTANCE hInstance);
698. BOOLInitInstance(HINSTANCE, int);
699. LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);
700. INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);
701.
702. int APIENTRY _tWinMain(HINSTANCE hInstance,
703. HINSTANCE hPrevInstance,
704. LPTSTR lpCmdLine,
705. int nCmdShow)
706. {
707. UNREFERENCED_PARAMETER(hPrevInstance);
708. UNREFERENCED_PARAMETER(lpCmdLine);
709. // TODO: разместите код здесь.
710. MSG msg;
711. HACCEL hAccelTable;
712. // Инициализация глобальных строк
713. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
714. LoadString(hInstance, IDC_MY2, szWindowClass, MAX_LOADSTRING);
715. MyRegisterClass(hInstance);
716. // Выполнить инициализацию приложения:
717. if (!InitInstance (hInstance, nCmdShow))
718. {
719. return FALSE;
720. }
721. hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2));
722. // Цикл основного сообщения:
723. while (GetMessage(&msg, NULL, 0, 0))
724. {
725. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
726. {
727. TranslateMessage(&msg);
728. DispatchMessage(&msg);
729. }
730. }
731. return (int) msg.wParam;
732. }
733. // ФУНКЦИЯ: MyRegisterClass()
734. //
735. // НАЗНАЧЕНИЕ: регистрирует класс окна.
736. //
737. // КОММЕНТАРИИ:
738. //
739. // Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
740. // был совместим с системами Win32, не имеющими функции RegisterClassEx'
741. // которая была добавлена в Windows 95. Вызов этой функции важен для того,
742. // чтобы приложение получило "качественные" мелкие значки и установило связь
743. // с ними.
744. //
745. ATOM MyRegisterClass(HINSTANCE hInstance)
746. {
747. WNDCLASSEX wcex;
748. wcex.cbSize = sizeof(WNDCLASSEX);
749. wcex.style= CS_HREDRAW | CS_VREDRAW;
750. wcex.lpfnWndProc= WndProc;
751. wcex.cbClsExtra= 0;
752. wcex.cbWndExtra= 0;
753. wcex.hInstance= hInstance;
754. wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2));
755. wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
756. wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
757. wcex.lpszMenuName= MAKEINTRESOURCE(IDC_MY2);
758. wcex.lpszClassName= szWindowClass;
759. wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
760. return RegisterClassEx(&wcex);
761. }
762. // ФУНКЦИЯ: InitInstance(HINSTANCE, int)
763. //
764. // НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
765. //
766. // КОММЕНТАРИИ:
767. //
768. // В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
769. // создается и выводится на экран главное окно программы.
770. //
771. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
772. {
773. HWND hWnd;
774. hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
775. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
776. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
777. if (!hWnd)
778. {
779. return FALSE;
780. }
781. ShowWindow(hWnd, nCmdShow);
782. UpdateWindow(hWnd);
783. return TRUE;
784. }
785. BOOL SetConnection( HWND hWnd )
786. {
787. cln_socket = socket( AF_INET, SOCK_STREAM, 0 ); // создаем сокет
788. if ( cln_socket == INVALID_SOCKET )
789. {
790. MessageBox( hWnd, "Socket error", "Error", MB_OK | MB_ICONSTOP );
791. return FALSE;
792. }
793. phe = gethostbyname( szHostName ); // Определяем адрес узла
794. if( phe == NULL )
795. {
796. closesocket( cln_socket );
797. MessageBox( hWnd, "Адрес хоста не определен", "Error", MB_OK | MB_ICONSTOP );
798. return FALSE;
799. }
800. dest_sin.sin_family = AF_INET;// Задаем тип адреса
801. dest_sin.sin_port = htons( SERV_PORT );// Устанавливаем номер порта
802. memcpy( (char FAR*) &(dest_sin.sin_addr), phe->h_addr, phe->h_length );// Копируем адрес узла
803. // Устанавливаем соединение
804. if( connect( cln_socket, (PSOCKADDR) &dest_sin, sizeof(dest_sin) ) == SOCKET_ERROR )
805. {
806. closesocket( cln_socket );
807. MessageBox( hWnd, "Ошибка соединения", "Error", MB_OK | MB_ICONSTOP );
808. return FALSE;
809. }
810. // при попытке соединения главное окно получит сообщение WSA_ACCEPT
811. if( WSAAsyncSelect( cln_socket, hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ) )
812. {
813. MessageBox( hWnd, "WSAAsyncSelect error", "Error", MB_OK );
814. return FALSE;
815. }
816. // Выводим сообщение об установке соединения с узлом
817. SendMessage( hwndEdit, WM_SETTEXT, 0, ( LPARAM ) "Связь установлена!" );
818. return TRUE;
819. }
820. void SendMsg( HWND hWnd )
821. {
822. cbWritten = SendMessage(hwndEdit,WM_GETTEXTLENGTH,0,0);
823. SendMessage(hwndEdit, WM_GETTEXT, (WPARAM) cbWritten, (LPARAM) szBuf);
824. if( send(cln_socket,szBuf,lstrlen(szBuf),0) != SOCKET_ERROR)
825. {
826. sprintf(m_mess, "\r\n Данные отосланы серверу \r\n %s",szBuf);
827. SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
828. }
829. else
830. {
831. sprintf(m_mess, "%s \r\n Ошибка отправки сообщения \r\n ",m_mess);
832. SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
833. }
834. }
835. void Task1()
836. {
837. DWORD id = GetCurrentProcessId();
838. HANDLE ds = GetCurrentProcess();
839. char str[256];
840. sprintf(str, "Идентификатор текущего процесса: %d\r\n",id );
841. strcat_s(szBuf, str);
842. sprintf(str, "Дескриптор текущего процесса: %d\r\n",ds );
843. strcat_s(szBuf, str);
844. }
845. // ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
846. //
847. // НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне.
848. //
849. // WM_COMMAND- обработка меню приложения
850. // WM_PAINT-Закрасить главное окно
851. // WM_DESTROY - ввести сообщение о выходе и вернуться.
852. //
853. //
854. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
855. {
856. int wmId, wmEvent;
857. PAINTSTRUCT ps;
858. HDC hdc;
859. switch (message)
860. {
861. case WM_CREATE:
862. hwndEdit = CreateWindow( // Создаем доч.окно для вывода данных от процессов
863. TEXT("EDIT"), NULL,
864. WS_CHILD | WS_VISIBLE | WS_VSCROLL |
865. ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
866. 0, 0, 400, 200, hWnd, NULL, hInst, NULL);
867. //===========================================================
868. err = WSAStartup( wVersionRequested, &wsaData );
869. if( err ){
870. MessageBox( hWnd, "WSAStartup Error","ERROR", MB_OK | MB_ICONSTOP );
871. return FALSE;
872. }
873. sprintf(m_mess, "Используется %s \r\nСтатус: %s\r\n ",
874. wsaData.szDescription, wsaData.szSystemStatus);
875. SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
876. break;
877. case WM_COMMAND:
878. wmId = LOWORD(wParam);
879. wmEvent = HIWORD(wParam);
880. // Разобрать выбор в меню:
881. switch (wmId)
882. {
883. case ID_32771:
884. SetConnection(hWnd);
885. break;
886. case ID_32772:
887. Task1();
888. SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)szBuf);
889. break;
890. case ID_32773:
891. SendMsg(hWnd);
892. break;
893. case WSA_NETEVENT:
894. // если на сокете выполняется передача данных, принимаем и отображаем их
895. if( WSAGETSELECTEVENT( lParam ) == FD_READ )
896. {
897. int rc = recv( cln_socket, szBuf, sizeof(szBuf), 0 );
898. if( rc )
899. {
900. szBuf[rc]='\0';
901. sprintf(m_mess, "%s \r\n Данные от сервера: %s\r\n ",m_mess ,szBuf);
902. SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
903. }
904. }
905. // если соединение завершено, выводим сообщение об этом
906. if( WSAGETSELECTEVENT( lParam ) == FD_CLOSE )
907. MessageBox( hWnd, "Сервер закрыт", "Server", MB_OK );
908. break;
909. case IDM_ABOUT:
910. DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
911. break;
912. case IDM_EXIT:
913. DestroyWindow(hWnd);
914. break;
915. default:
916. return DefWindowProc(hWnd, message, wParam, lParam);
917. }
918. break;
919. case WM_PAINT:
920. hdc = BeginPaint(hWnd, &ps);
921. // TODO: добавьте любой код отрисовки...
922. EndPaint(hWnd, &ps);
923. break;
924. case WM_DESTROY:
925. PostQuitMessage(0);
926. break;
927. default:
928. return DefWindowProc(hWnd, message, wParam, lParam);
929. }
930. return 0;
931. }
932. // Обработчик сообщений для окна "О программе".
933. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
934. {
935. UNREFERENCED_PARAMETER(lParam);
936. switch (message)
937. {
938. case WM_INITDIALOG:
939. return (INT_PTR)TRUE;
940. case WM_COMMAND:
941. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
942. {
943. EndDialog(hDlg, LOWORD(wParam));
944. return (INT_PTR)TRUE;
945. }
946. break;
947. }
948. return (INT_PTR)FALSE;
949. }
Размещено на Allbest.ru
Подобные документы
Разработка приложений на платформе Win32 для исследования взаимодействия между процессами через отображение файла в память. Модель приложений "клиент - сервер". Описание алгоритма работы программы-клиента и программы-сервера. Результаты работы приложений.
курсовая работа [869,3 K], добавлен 18.05.2014Анализ архитектуры информационной системы, в структуру которой входят системы файл-сервер и клиент-сервер. Сравнение языков запросов SQL и QBE. Принципы разработки приложений архитектуры клиент-сервер при помощи структурированного языка запросов SQL.
курсовая работа [88,9 K], добавлен 11.04.2010Основные вехи на пути развития систем программирования. Microsoft Access - первая СУБД для персональных компьютеров, созданная для работы в среде Windows. Перенос файл-серверных приложений в среду клиент-сервер. Использование ActiveX Data Objects.
презентация [662,2 K], добавлен 11.04.2013Варианты топологии одноранговой вычислительной сети, принцип работы распределенных пиринговых сетей. Использование в крупных сетях модели "клиент-сервер". Характеристика операционных систем с сетевыми функциями, многопроцессорная обработка информации.
творческая работа [51,8 K], добавлен 26.12.2011Обзор существующего программного обеспечения. Структура и отличительные особенности формата MP3. Сокеты TCP/IP, клиент-сервер. Язык программирования Visual Basic.net в среде разработки Visual Studio 2008. Разработка приложения "MP3_Catalogizator".
дипломная работа [2,1 M], добавлен 09.02.2015Архитектура "клиент-сервер". Системный анализ базы данных "Газета объявлений", ее инфологическое и физическое проектирование. Программирование на стороне SQL-сервера. Разработка клиентской части в Borland C++ Builder 6.0 и с помощью Web-технологий.
курсовая работа [1,3 M], добавлен 07.07.2013Методика и основные этапы разработки системы тестирования для оценки уровня знаний студентов с применением технологии "Клиент-сервер". Проектирование клиентской, серверной части данной системы тестирования, порядок составления финальных отчетов.
дипломная работа [587,6 K], добавлен 08.11.2010Характеристика разновидностей программной реализации чатов. Разработка программы клиент-серверного чата с возможность общения в локальной сети нескольких человек одновременно. Протокол взаимодействия клиента и сервера. Порядок работы с программой.
курсовая работа [530,7 K], добавлен 25.04.2015Устройство веб-приложений, преимущества их построения. Характеристика технологий веб-программирования, используемых на стороне сервера и на стороне клиента. Формирование и обработка запросов, создание интерактивного и независимого от браузера интерфейса.
контрольная работа [76,4 K], добавлен 08.07.2014Описание предметной области и разработка электронного учебника на основе архитектуры "клиент – сервер". Тестирование программы менеджера и создание интерфейса главного меню. Вход в программу в качестве пользователя и обеспечение перехода к данным лекций.
курсовая работа [1,5 M], добавлен 26.02.2015