Разработка приложений по технологии "клиент-сервер"

Характеристика модели клиент-сервер как технологии взаимодействия в информационной сети. Разработка и описание алгоритмов работы приложений на платформе 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.