Создание приложений с использованием многопоточности при обработки запросов клиентов

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования

«Гомельский государственный технический университет

имени П.О.Сухого»

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

направление специальности 1-40 01 02-01 «Информационные системы и

технологии в проектировании и производстве»

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   №4

по дисциплине «Программирование сетевых приложений»

на тему:      «Создание приложений с использованием многопоточности при обработки запросов клиентов»

                                                                 Выполнил:          студент гр. ИТ-32

                                                                                                 

Принял:            преподаватель    

                                                                                    

Гомель 2014

Цель: Разработать программное обеспечение, реализующее передачу данных между компьютерами, с использованием многопоточности при обработки запросов клиентов

Задание: Разработать сетевое приложение, реализующее игру в «Bomberman» между двумя компьютерами.

Результаты работы клиента

Рисунок 1 – Оба игрока «живы»

Рисунок 2 – Игрок победил

Результат работы сервера

Рисунок 3 – Отображение информации об игроках на сервере


ПРИЛОЖЕНИЕ А

(Листинг программы клиента)

#ifdef __cplusplus

    #include <cstdlib>

#else

    #include <stdlib.h>

#endif

#ifdef __APPLE__

#include <SDL/SDL.h>

#else

#include <SDL.h>

#include <SDL_image.h>

#endif

#include <winsock2.h>

#include<Windows.h>

#include <stdexcept>

#include <vector>

#include <string>

#include <iostream>

typedef struct {int mtr[7][13][6];} Matrix;

#define bombCode 5

SDL_Surface** mans;

SDL_Surface* jpgMap= IMG_Load("map.gif");

SDL_Rect mapPos;

SOCKET clientSocket;

typedef struct

{

       int x;

       int y;

} position;

Matrix Map;

char* str;

int matrix[7][13][6]={{{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0},{1,0,0,0,0,0},{0,0,0,0,0,0}},

{{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}}};

void DrawBomb(SDL_Surface* screen);

void RunClient();

void ProcessString();

bool pressBtn=false;

HANDLE semaphore;

SDL_Surface* screen;

int main ( int argc, char** argv )

{

    WSADATA wsa_data;

    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101)

    {

             MessageBox(0, (LPCSTR) "WSAStartup error", (LPCSTR)"Error", MB_OK);

    }

       clientSocket=socket(AF_INET,SOCK_STREAM,0);

       if(clientSocket==INVALID_SOCKET)

       {

             MessageBox(0, (LPCSTR) "socket error", (LPCSTR)"Error", MB_OK);

       }

       SOCKADDR_IN ssa;

       ssa.sin_family=AF_INET;

       ssa.sin_port=htons(561);

       //к кому подключаемся

       //

       int ssa_size=sizeof(ssa);

       ssa.sin_addr.s_addr=inet_addr(argv[1]);//inet_addr("192.168.130.1");

       while(!connect(clientSocket,(sockaddr*) &ssa,ssa_size))      {}

       mapPos.x=0;

       mapPos.y=0;

    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )

    {

        printf( "Unable to init SDL: %s\n", SDL_GetError() );

        return 1;

    }

    atexit(SDL_Quit);

    screen = SDL_SetVideoMode(13*60, 7*60, 16,

                                       SDL_HWSURFACE|SDL_DOUBLEBUF);

       semaphore=CreateSemaphore(NULL,1,1,NULL);

    if ( !screen )

    {

        printf("Unable to set 640x480 video: %s\n", SDL_GetError());

        return 1;

    }

       CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)RunClient,NULL,NULL,NULL);

       bool done = false;

       int key = 0;

       while (!done)

    {

        SDL_Event event;

        while (SDL_PollEvent(&event))

        {

            switch (event.type)

            {

            case SDL_QUIT:

                done = true;

                break;

            case SDL_KEYDOWN:

                {

Похожие материалы

Информация о работе