МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«Гомельский государственный технический университет
имени П.О.Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
направление специальности 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:
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.