Непростое, но, как мне кажется, полезно задание:
Напишите TCP сервер используя сокеты и системный вызов poll(select для windows). Примерный интерфейс показан ниже. Вероятно, удобнее писать под linux, хотя большой разницы быть не должно. Должно поддерживаться подключение нескольких клиентов (в качестве клиента можно использовать утилиту netcat). Если возьметесь, могу по ходу дела давать подсказки.
typedef std::function<void(std::String const &, std::String const &, int)> on_msg_func_t;
Class TcpStringServer
{
public:
void register_on_msg_func(on_msg_func_t const & func);
void start(int port);
void send_msg(std::string const &addr, int port, std::string const &msg);
};
void on_msg_func(TcpStringServer const & server, std::string const &msg, std::string const &addr, int port)
{
server.send_msg("OK");
std::cout << (boost::format("message %s resivied from %s:%d") % msg % addr % port ).str();
//std::cout << "message " << msg << "received from " << addr << ":" << port << "\n";
}
int main()
{
TcpStringServer server;
server.register_on_msg_func(std::bind(on_msg_func, server, _1, _2, _3));
server.start(12345);
}
Возможное развитие:
* простая сетевая игра, крестики нолики для начала
* удаленная консоль (прообраз ssh)