TCPGram
1.0.0
TCPGRAM은 TCP를 사용하는 동안 UDP와 같은 데이터 그램 (개별 패킷)을 제공하는 라이브러리입니다. 이를 통해 TCP가 UDP에 대한 신뢰성을 구현하지 않고 제공하는 신뢰성으로 패킷 기반 네트워킹을 수행 할 수 있습니다.
TCPGRAM은 C ++ 11 이상을 컴파일해야하며 Boost ASIO와 함께 문제없이 대부분의 플랫폼에서 컴파일해야합니다.
TCP_SERVER.H 및 TCPGRAM.H 포함 AA 서버 설정은 쉽습니다.
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 ();
}마찬가지로 클라이언트에 TCPGRAM 사용 (소켓에는 BOOST ASIO 사용)
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 ();
}