Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Лабораторная работа №4
Написать программу, которая осуществляет передачу сообщений по сети по протоколу TCP/IP. При этом:
1) Адрес получателя и адрес отправителя должен отличаться не менее, чем на 3 IP-адреса (с IP-адреса 192.168.3.21 можно отправить сообщения на адреса до 192.168.3.17 и после 192.168.3.25, а на адреса от 192.168.3.18 и до 192.168.3.24 – нельзя);
2) Сообщения должны передаваться по сегментам сети, при этом сообщение может передаваться не далее, чес на 2 IP-адреса (с IP-адреса 192.168.3.21 можно отправить сообщения на адреса 192.168.3.19, 192.168.3.20, 192.168.3.22, 192.168.3.23, а на адреса до 192.168.3.18 и после 192.168.3.24 – нельзя);
3) На каждом сегменте к сообщению добавляется IP-адрес посредника;
4) Ввести элемент случайности: каждый посредник может либо принять, либо отклонить сообщение с вероятностью отказа 0,3. Факт отказа отмечать в формируемом для дальнейшей отправки сообщении. При этом маршрут не может содержать более 10 узлов. Если количество узлов оказалось более 10 (из-за протяжённости маршрута или из-за ошибок и отказов), вернуть ответ напрямую отправителю о невозможности отправки сообщения, но с указанием проделанного маршрута;
5) Ввести контроль ошибок с помощью кода Хэмминга, на каждом этапе пересылки ЄAaь код Хэмминга и передавать следующему адресату, который проверяет наличие ошибки. Отправитель с вероятностью 0,1 может допустить одиночную ошибку. Если адресат получает ошибочное сообщение, он его исправляет и отмечает этот факт в формируемом для отправки далее сообщении;
6) Если сообщение достигло адресата, то на адрес отправителя напрямую отправляется сообщение о доставке с указанием проделанного маршрута.
Для проверки работы программы необходимо разместить несколько копий на компьютерах в сети и запустить их на приём и передачу сообщений. Проверить, как передаются сообщения и какие при этом формируются маршруты.
[root@v6704 debug]# make
[ 1%] Generating moc_wordplugin.cxx
Scanning dependencies of target gluxi_plugin_word
[ 1%] Building CXX object src/plugins/word/CMakeFiles/gluxi_plugin_word.dir/wordplugin.o
/home/gluxi/src/plugins/word/wordplugin.cpp: In member function ‘virtual bool WordPlugin::parseMessage(gloox::Stanza*)’:
/home/gluxi/src/plugins/word/wordplugin.cpp:104: error: ‘class gloox::Stanza’ has no member named ‘addAttribute’
/home/gluxi/src/plugins/word/wordplugin.cpp:105: error: ‘class gloox::Stanza’ has no member named ‘finalize’
/home/gluxi/src/plugins/word/wordplugin.cpp:106: error: ‘class gloox::Stanza’ has no member named ‘xml’
/home/gluxi/src/plugins/word/wordplugin.cpp:136: error: ‘class gloox::Stanza’ has no member named ‘addAttribute’
/home/gluxi/src/plugins/word/wordplugin.cpp:137: error: ‘class gloox::Stanza’ has no member named ‘finalize’
make[2]: *** [src/plugins/word/CMakeFiles/gluxi_plugin_word.dir/wordplugin.o] Error 1
make[1]: *** [src/plugins/word/CMakeFiles/gluxi_plugin_word.dir/all] Error 2
make: *** [all] Error 2
debug]# cmake ..
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found.
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt-Version 4.3.4
-- Looking for _POSIX_TIMERS
-- Looking for _POSIX_TIMERS - found
-- Found OpenSSL: /usr/lib/libssl.so
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Finding plugins in /home/gluxi/src/plugins
-- -> Found plugin: word
-- -> Found plugin: net
-- -> Found plugin: webstatus
-- -> Found plugin: muc
-- -> Found plugin: config
-- -> Found plugin: core
-- -> Found plugin: misc
-- -> Found plugin: user
-- -> Found plugin: alias
-- -> Found plugin: admin
-- PluginLoader generated
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gluxi/debug