Создание последовательного сервера с установлением логического соединения (TCP/IP)

Автор работы: Пользователь скрыл имя, 02 Июня 2013 в 12:04, лабораторная работа

Краткое описание

Цель работы: изучить методы создания серверов, используя алгоритм последовательной обработки запросов.
Задание №2
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает слово серверу, сервер возвращает назад в обратном порядке следования букв это слово клиенту.

Вложенные файлы: 1 файл

КС_ЛР_1.doc

— 38.00 Кб (Скачать файл)

Белорусский Государственный  Университет Информатики и  Радиоэлектроники

                 Кафедра экономической информатики

 

 

 

 

Лабораторная  работа №1 по теме

«Создание последовательного сервера с установлением логического соединения (TCP/IP)»

 

 

 

 

 

 

 

                                                              Выполнила:

                                                   

 

 

 

 

Минск 2011

 

Цель работы: изучить методы создания серверов, используя алгоритм последовательной обработки запросов.

 

Задание №2

Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает слово серверу, сервер возвращает назад в обратном порядке следования букв это слово клиенту.

                      

СЕРВЕРНАЯ ЧАСТЬ

#include <winsock2.h>

#include <iostream>

using namespace std;

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#pragma comment (lib,"ws2_32.lib")

 

int main(){

WORD wVersionRequested; //переменная типа WORD

WSADATA wsaData; //структура wsaData

wVersionRequested=MAKEWORD(2,2); //максимальный номер версии WinSock, доступный приложению

WSAStartup(wVersionRequested,&wsaData);  //функция инициализации WinSock API

SOCKET  s = socket(AF_INET, SOCK_STREAM, 0); //функция,используемая для создания сокета

struct sockaddr_in local; //структура адреса

local.sin_family=AF_INET;

local.sin_port=htons(1280); //определяет порт, который будет ассоциирован с сокетом

local.sin_addr.s_addr=htonl(INADDR_ANY); //В поле sin_addr хранится физический IP-адрес компьютера ,INADDR_ANY позволяет использовать любой IP-адрес компьютера

int c=bind(s,(struct sockaddr*)&local,sizeof(local)); //функция для связывания конкретного адреса с сокетом

int r=listen(s,5); //функция помещает сокет в состояние прослушивания

while (true){

char b[255],*Res;

sockaddr_in remote_addr; //структура определяет удаленный адрес,с которым соединяется сокет

int size=sizeof(remote_addr);

SOCKET s2=accept(s,(struct sockaddr*)&remote_addr,&size); //функция выполняет открытие соединения

while (recv(s2,b,strlen(b)+1,0)){    //функция для приема данных через сокет потока

cout<<b<<endl;

Res=new char[strlen(b)+1];

int i,j;

for ( i=strlen(b)-1,j=0;i>=0;i--,j++)

Res[j]=b[i];

 

Res[strlen(b)]='\0';

cout<<Res<<endl;

send(s2,Res,strlen(Res)+1,0); //функция для пересылки данных

 

}

closesocket(s2); //функция для закрытия сокета

}

WSACleanup(); //прекращение работы WinSock DLL

return 0;

}

 

КЛИЕНТСКАЯ ЧАСТЬ

 

#include <winsock2.h>

#pragma comment (lib,"ws2_32.lib")

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

using namespace std;

 

int main()

{

WORD wVersionRequested;      //максимальный номер версии WinSock

WSADATA wsaData;         //номер версии

wVersionRequested=MAKEWORD(2,2);

WSAStartup(wVersionRequested,&wsaData); //инициализация WinSock API

struct sockaddr_in peer;

peer.sin_family=AF_INET; 

peer.sin_port=htons(1280); //определяет порт, который будет ассоциирован с сокетом

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

SOCKET s=socket(AF_INET,SOCK_STREAM,0); //создания сокета

//AF_INET (домен)

//SOCK_STREAM (тип сокета)

//0 (протокол)

 

connect(s,(struct sockaddr*) &peer,sizeof(peer)); //функция посылает запрос на открытие соединения

char buf[255],b[255];

cout<<"Enter streng"<<endl;

cin.getline(buf,100,'\n');

int i=strlen(buf);

buf[i]='\0';

// cout<<buf<<endl;

send(s,buf,sizeof(buf)+1,0); //функция для пересылки данных

if (recv(s,b,strlen(b)+1,0)!=0) //функция для приема данных через сокет потока

{

b[strlen(b)]='\0';

cout<<b<<endl;

getch();

closesocket(s); //функция для закрытия сокета

WSACleanup(); //прекращение работы WinSock DLL

return 0;

}

 

 

Для просмотра  работы программы следует сначала  запустить серверную часть,затем,клиентскую часть.


Информация о работе Создание последовательного сервера с установлением логического соединения (TCP/IP)