TCPGram
1.0.0
TCPGRAM adalah perpustakaan yang menawarkan datagram seperti UDP (paket individual) saat menggunakan TCP. Ini memungkinkan Anda melakukan jaringan berbasis paket dengan keandalan yang ditawarkan TCP tanpa harus menerapkan keandalan untuk UDP.
TCPGRAM membutuhkan C ++ 11 atau lebih baru untuk dikompilasi, bersama dengan Boost ASIO harus dikompilasi pada sebagian besar platform tanpa masalah.
Termasuk tcp_server.h dan tcpgram.h mengatur server AA semudah
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 ();
}Demikian juga, menggunakan tcpgram untuk klien (menggunakan boost asio untuk soket)
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 ();
}