Автор работы: Пользователь скрыл имя, 02 Июня 2013 в 12:04, лабораторная работа
Цель работы: изучить методы создания серверов, используя алгоритм последовательной обработки запросов.
Задание №2
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает слово серверу, сервер возвращает назад в обратном порядке следования букв это слово клиенту.
Белорусский Государственный Университет Информатики и Радиоэлектроники
Кафедра экономической информатики
Лабораторная работа №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,
WSAStartup(wVersionRequested,&
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(
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,
WSAStartup(wVersionRequested,&
struct sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(1280); //определяет порт, который будет ассоциирован с сокетом
peer.sin_addr.s_addr=inet_
SOCKET s=socket(AF_INET,SOCK_STREAM,
//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;
}
Для просмотра
работы программы следует сначала
запустить серверную часть,