Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
156
Добавлен:
01.04.2014
Размер:
1.95 Кб
Скачать

#include <stdlib.h> // стандартные функции
#include <iostream> // потоки ввода-вывода
#include <winsock2.h> // работа с сокетами

using namespace std;

void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	SOCKET s1, s2;
	sockaddr_in addr1, addr2;
	int i, t, r, err, size;
	char b[200], weat[7][200];
	char *dow[7] = {"понедельник", "вторник", "среду", "четверг", "пятницу", "субботу", "воскресенье"};
	char *rain[3] = {"ясно", "переменная облачность", "ожидается дождь"};

	for (i = 0; i < 7; i++) // генерация прогноза на неделю
	{
		r = rand() % 3; // осадки
		t = rand() % 5 + 5; // тепмература
		sprintf(weat[i], "Прогноз погоды на %s: температура воздуха %+i, %s.", dow[i], t, rain[r]);
	}

	wVersionRequested = MAKEWORD(2, 2); //  максимальный номер версии
	err = WSAStartup(wVersionRequested, &wsaData); // инициализация WinSock DLL
	if (err != 0) return; // если ошибка - завершение работы

	addr1.sin_family = AF_INET; // тип адреса
	addr1.sin_port = htons(1280); // номер порта
	addr1.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP-адрес сервера
	
	s1 = socket(AF_INET, SOCK_STREAM, 0); // создание сокета, протокол TCP
	bind(s1, (sockaddr*) &addr1, sizeof(addr1)); // связывание сокета с локальным адресом
	listen(s1, 5); // перевод сокета в состояние прослушивания

	while (true) // вечный цикл обработки
	{
		size = sizeof(addr2);
		s2 = accept(s1, (sockaddr*)&addr2, &size); // ожидание соединения с клиентом

		while ((i = recv(s2, b, sizeof(b), 0)) != 0) // пока не закрыто соединение
		{
			i = atoi(b); // номер дня недели
			if ((i >= 1) && (i <= 7)) // проверка на корректность
				strcpy(b, weat[i - 1]); // прогноз на выбранный день
			else strcpy(b, "Ошибка! Неверный день недели."); // сообщение о ошибке
			send(s2, b, sizeof(b), 0); // отправка ответа клиенту
		}

		closesocket(s2); // закрытие сокета
	}

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

Соседние файлы в папке lab1_server