Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Во всем остальном обе пары функций полностью идентичны




Все четыре функции при возникновении ошибки возвращают значение SOCKET_ERROR = -1.

Шаг шестой, последний – для закрытия соединения и уничтожения сокета предназначена функция "int closesocket (SOCKET s)", которая в случае удачного завершения операции возвращает нулевое значение.

Перед выходом из программы, необходимо вызвать функцию "int WSACleanup (void)" для деинициализации библиотеки WINSOCK и освобождения используемых этим приложением ресурсов. Внимание: завершение процесса функцией ExitProcess автоматически не освобождает ресурсы сокетов.

 

Задания к лабораторной работе № 2:

Все программы выполняются на любом языке программирования, используются только функции Windows API. Для каждого варианта должно быть реализовано две версии программы: одна работающая посредством протокола TCP, вторая – UDP.

Написать программу, реализующую следующие функции:

Вариант 1: Программа представляет простейший «чат» (от англ. chat), позволяющий обмениваться текстовыми сообщениями между двумя компьютерами.

Вариант 2: Программа позволяет копировать бинарные файлы с одного компьютера на другой.

Вариант 3: Программа измеряет скорость передачи информации по протоколам TCP и UDP, а так же количество потерянных (искаженных) пакетов. Трафик генерируется псевдослучайным образом (т.е. генерируется псевдослучайная последовательность данных, отсылается на другой компьютер и там сравнивается с эталоном).

Вариант 4: Программа удаленного рисования. На первом компьютере пользователь может рисовать кривые мышкой на «холсте». На втором на таком же холсте рисунок повторяется в реальном времени.

 

Пример программы реализации сервера DayTime:

 

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

 

#define fatal(x) { perror(x); exit(1); }

 

main()

{

int s, c, sz;

struct sockaddr_in ssa, csa;

struct sockaddr *sp, *cp;

char *tstr, node[128], service[16];

time_t itime;

 

sp = (struct sockaddr *)&ssa;

cp = (struct sockaddr *)&csa;

 

/* Создаём сокет */

s = socket(AF_INET, SOCK_STREAM, 0);

if (s == -1)

fatal("Невозможно создать сокет");

 

/* Занимаем порт 13 */

ssa.sin_family = AF_INET;

ssa.sin_port = htons(13);

ssa.sin_addr.s_addr = INADDR_ANY;

 

if (bind(s, sp, sizeof(ssa)) == -1)

fatal("Невозможно занять порт");

 

/*

* Переводим сокет в режим ожидания запросов

* на установление соединения

*/

if (listen(s, 0) == -1)

fatal("Ошибка при выполнении listen");

 

while (1) {

/* Принимаем соединение */

sz = sizeof(csa);

if ((c = accept(s, cp, &sz)) == -1)

fatal("Ошибка при выполнении accept");

 

/* Получаем строку, содержащую дату и время */

itime = time(NULL);

tstr = ctime(&itime);

 

/* Выводим время поступления запроса */

printf("%s\tполучен запрос от ", tstr);

/* Выводим информацию о клиенте */

if (getnameinfo(cp, sz, node,

128, service, 16, 0) == 0)

printf("%s:%s\n", node, service);

else

printf("%s:%d\n", inet_ntoa(csa.sin_addr),

ntohs(csa.sin_port));

 

/* Отправляем дату и время клиенту */

send(c, tstr, 25, 0);

 

/* Закрываем соединение */

close(c);

}

}

 

 





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 798 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2510 - | 2325 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.