Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая спо / курсовая.docx
Скачиваний:
22
Добавлен:
11.04.2015
Размер:
88.04 Кб
Скачать

2.Практическая часть

В ходе выполнения курсовой работы было разработано и запрограммировано в среде программирования Borland Builder C++ клиент серверное приложение с использованием сокетов.

Серверное приложение выполняет создание сервера и подключение клиентов к нему и обмена с ним сообщеними.

Рисунок 1.Создание сервера.

Рисунок 2.Подключение Клиента.

Рисунок 3.Обмен сообщения с клиентом.

Листинг программы сервера

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <winsock.h>

#include <iostream>

#include <list>

#include <fstream.h>

#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused

using namespace std;

WSADATA wsadata;

SOCKET server_socket;

char buff[1024];

std::list<SOCKET> clients;

DWORD WINAPI ClientPool(LPVOID param)

{ SOCKET client_socket = (SOCKET)param;

while(true)

{

int bytes = recv(client_socket, &buff[0], sizeof(buff), 0);

printf("client: %s\n", buff);

} return 0;/*

int bytes_recv;

SOCKET client_socket;

client_socket = (SOCKET)param;

while( (bytes_recv = recv(client_socket,&buff[0],sizeof(buff),0)) && bytes_recv !=SOCKET_ERROR)

{printf("client: %s\n", buff);

std::list<SOCKET>::iterator it;

for(it = clients.begin(); it!=clients.end(); ++it)

send((*it), buff, bytes_recv, 0);} */

printf("disconnect\n");

closesocket(client_socket);

return 0;}

int main()

{WSAStartup(MAKEWORD(2,2),&wsadata);

server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

SOCKADDR_IN server_addr;

server_addr.sin_family = AF_INET;

server_addr.sin_port = htons(6666);

server_addr.sin_addr.s_addr = INADDR_ANY;

bind(server_socket,(SOCKADDR*)&server_addr, sizeof(server_addr));

listen(server_socket, 10);

printf("Server start\n");

while(true)

{

SOCKADDR_IN client_addr;

int len_client_addr = sizeof(client_addr);

SOCKET client = accept(server_socket, (struct sockaddr*)&client_addr, &len_client_addr);

printf("New connection\n");

clients.push_back(client);

DWORD ThreadID;

HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ClientPool,

(void*)client, 0, &ThreadID);

while(1)

{

fgets(&buff[0],sizeof(buff),stdin);

send(client, buff, strlen(buff)-1,0);

}

}

return 0;

}

//---------------------------------------------------------------------------

Клиентское приложение выполняет подключение к серверу и обмен с ним сообщениями.

Рисунок 4.Подключение к серверу.

Рисунок 5.Обмен сообщениями с клиентом.

Листинг программы Клиент.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <winsock.h>

#include <iostream>

#include <list>

#include <stdlib.h>

#include <stdio.h>

#include <fstream.h>

#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused

WSADATA wsadata;

SOCKET client_socket;

char buff[1024];

DWORD WINAPI ServerPool(LPVOID param)

{

SOCKET server_socket = (SOCKET)param;

while(true)

{

int bytes = recv(server_socket, &buff[0], sizeof(buff), 0);

printf("server: %s\n", buff);

}

return 0;

}

int main()

{

WSAStartup(MAKEWORD(2,2),&wsadata);

client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

sockaddr_in dest_addr;

dest_addr.sin_family = AF_INET;

dest_addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );

dest_addr.sin_port = htons(6666);

if(connect(client_socket, (SOCKADDR*)&dest_addr, sizeof(dest_addr)))

printf("Not connect\n");

else printf("Connect\n");

DWORD ThreadID;

HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ServerPool,

(void*) client_socket, 0, &ThreadID);

while(1)

{

fgets(&buff[0],sizeof(buff),stdin);

send(client_socket, buff, strlen(buff)-1,0);

}

return 0;

}

//---------------------------------------------------------------------------

Соседние файлы в папке курсовая спо