Komunikacja TCP/IP na zawodach
Transkrypt
Komunikacja TCP/IP na zawodach
Komunikacja TCP/IP na zawodach Komunikacja TCP/IP na zawodach W związku z interaktywnym charakterem zadań, drużyny powinny łączyć się na określony port TCP serwera konkursowego, na którym będzie prowadzona komunikacja w postaci tekstowej. Polecamy zaznajomić się z odpowiednimi bibliotekami przed konkursem, aby uniknąć niepotrzebnej straty czasu na zawodach. Oprócz bibliotek, przydatny może się okazać także mały i prosty program netcat: http://netcat.sourceforge.net/ (dla systemów UNIX-owych, ale istnieje także wersja dla systemów Windows) Zwracamy uwagę na wyłączenie buforowania TCP (algorytmu Nagle’a). Zazwyczaj jest to realizowane przez włączenie opcji TCP NODELAY. Przykład komunikacji można zobaczyć w treściach zadań z poprzednich edycji, dostępnych pod adresem http://www.deadline24.pl/assets/problemsets/dl24.final.2013.pl.pdf. Zawodnikom piszącym w C++ proponujemy przyjrzeć się bibliotece Boost.Asio: http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html. Poniżej załączamy przykładowy program. #include <string> #include <iostream> #include <boost/asio.hpp> int main(int argc, char* argv[]) { std::string host(argv[1]); std::string port(argv[2]); std::cout << "Connecting to " << host << ":" << port << "..." << std::endl; boost::asio::ip::tcp::iostream connection(host, port); //enable the TCP_NODELAY option - i.e. disable the Nagle’s algorithm boost::asio::ip::tcp::no_delay opt(true); connection.rdbuf()->set_option(opt); if(!connection.good()) return -1; std::cout << "Sending something..." << std::endl; connection << "something" << std::endl; std::cout << "Receiving..." << std::endl; while(connection.good()) { std::string input; getline(connection, input); std::cout << input << std::endl; } return 0; }