Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
214
Добавлен:
01.04.2014
Размер:
3.42 Кб
Скачать
/*Лабораторная работа №1
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP.
Функционирование клиента и сервера реализовать следующим образом: клиент посылает два
слова серверу, сервер их сравнивает и возвращает "истина", если они
 одинаковы по количеству и порядку следования в них букв, и "ложь" - при невыполнении
  хотя бы одного из этих условий.
*/

//подключаем к проекту библиотеку WinSock2.h
#include <winsock2.h>	

// подключение остальных библиотек
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
	// значение типа word которое определяе максимальный номер версии WinSock, доступный приложению.
	WORD wVersionRequested;
	
	//структура wsaData содержит номер версии, 
	//которая должна использоваться, максимальный номер версии, текстовые строки.
	WSADATA wsaData;
	
	//инициализация переменной типа word
	wVersionRequested = MAKEWORD(2,2);
	
	// инициализация WinSockAPI
	WSAStartup (wVersionRequested, &wsaData);
	
	// создание сокета	
	SOCKET s = socket (AF_INET, SOCK_STREAM, 0);
	
	//структура адреса
	struct sockaddr_in local;
	
	//стандартное значение
	local.sin_family =  AF_INET;
	
	//порт ассоциированный с сокетом
	local.sin_port = htons(1280);
	
	//физический IP адрес для получения или посылки данных для сокета
	local.sin_addr.s_addr = htonl (INADDR_ANY);
	
	//связывание конкретного адреса с сокетом
	int c = bind(s,(struct sockaddr*) &local, sizeof(local));
	
	//установление соединения с клиентом. помещение сокета в состояние прослушивания
	int r = listen (s,5);
	
	//
	while (true)
	{
		// структура определяет удаленный адрес для присоединения сокета
		sockaddr_in remote_addr;
		int size = size = sizeof (remote_addr);
		
		//открытие соединения
		SOCKET s2 = accept (s, (struct sockaddr*) &remote_addr, &size);
		
		char b[255]; 

		//прием данных через сокет потока
		while (recv (s2, b, sizeof(b), 0)!=0)
		{
			// переменная для возврата результата
			char Res[10];
			
			//вспомогательная переменная для разбития на лексемы
			char * tokenPtr;
			
			//переменные для хранения лексем
			char * first;
			char * second;
			
			//отделение первой лексемы
			tokenPtr = strtok (b, " ");
			
			//определение ее размера
			int length = strlen(tokenPtr);
			
			//выделение динамической памяти для первого слова
			first = new char [length] ;
			strcpy(first, tokenPtr);
			
			//выделение динамической памяти для второго слова
			second = new char [100] ;
			
			//счетчик лексем
			int count = 1;
			
			// цикл для отделения второй лексемы
			while ((tokenPtr != NULL)&&(count==1))
			{
				count++;
				
				//продолжение разбиения на строки
				tokenPtr = strtok (NULL, " ");
				
				//определение второго слова
				length = strlen(tokenPtr);
				second = NULL;
				second =  new char [length];
				strcpy(second, tokenPtr);
			}
			
			//равны или нет введенные слова
			if (strcmp(first, second)==0) strcpy(Res,"true");
			else strcpy(Res,"false");
			
			//вывод результата в окне сервера
			cout<<"_______________"<<endl;
			cout<<Res<<endl;
			
			//пересылка данных в открытый сокет
			send (s2, Res, sizeof(Res)+1, 0);
			first = NULL;
			second = NULL;
			delete [] first;
			delete [] second;
		}
		
		//закрытие сокета
		closesocket(s2);
	}
	
	//завершение работы с WinSock DLL	
	WSACleanup();
}
Соседние файлы в папке TCPserv
  • #
    01.04.20143.42 Кб214serv.cpp
  • #
    01.04.20144.33 Кб208TCPserv.dsp
  • #
    01.04.2014539 б207TCPserv.dsw
  • #
    01.04.201441.98 Кб208TCPserv.ncb
  • #
    01.04.201448.64 Кб207TCPserv.opt
  • #
    01.04.20141.29 Кб208TCPserv.plg