TCPGram
1.0.0
O TCPgram é uma biblioteca que oferece datagramas do tipo UDP (pacotes individuais) enquanto usam o TCP. Isso permite fazer redes baseadas em pacotes com a confiabilidade que o TCP oferece sem precisar implementar a confiabilidade para o UDP.
O tcpgram requer C ++ 11 ou posterior para compilar, juntamente com o Boost ASIO, ele deve compilar na maioria das plataformas sem problemas.
Incluindo tcp_server.h e tcpgram.h A configuração do servidor AA é tão fácil quanto
std::unordered_map<tcp::socket*, tcpgram*> g_clients;
// called to process a recieved datagram
bool process_datagram_server (tcp::socket* sock, raw_message* msg) {
printf ( " SERVER Recieved datagram of %X bytes starting with %X, sending packet back... n " , msg-> m_size , msg-> m_buf [ 0 ]);
g_clients[sock]-> send (msg);
return true ;
}
// called when a new client is accepted
bool accept_client_callback (tcp::socket* sock) {
g_clients[sock] = new tcpgram (sock, process_datagram_server, 0x8000 );
return true ;
}
// called from tcp_server to recieve on a socket
bool read_socket_callback (tcp::socket* sock) {
return g_clients[sock]-> recieve ();
}
void start_server () {
tcp_server server = tcp_server (PORT, accept_client_callback, read_socket_callback);
server. run ();
}Da mesma forma, usando o tcpgram para o cliente (usando o Boost ASIO para o soquete)
bool process_datagram_client (tcp::socket* sock, raw_message* msg) {
printf ( " CLIENT Recieved datagram of %X bytes starting with %X n " , msg-> m_size , msg-> m_buf [ 0 ]);
return true ;
}
void start_client () {
boost::asio::io_context ctx;
auto socket = new tcp::socket (ctx);
boost:: system ::error_code error;
boost::array< uint8_t , MAX_BUFLEN> buf;
socket-> connect ( tcp::endpoint ( boost::asio::ip::address::from_string (IP, error), PORT), error);
if (error) {
printf ( " Failed to connect to server. n " );
}
tcpgram dgram = tcpgram (socket, process_datagram_client);
auto msg = raw_message ();
msg. put < uint8_t >( 10 ); // fill the message with random stuff
msg. put_raw ( 0x6000 );
dgram. send (&msg);
while ( true ) // just keep trying to recieve
dgram. recieve ();
}