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;
}

Podobne dokumenty