TCPGram
1.0.0
TCPGRAM เป็นไลบรารีที่ให้บริการดาต้าแกรมที่มีลักษณะคล้าย UDP (แต่ละแพ็คเก็ต) ในขณะที่ใช้ TCP สิ่งนี้ช่วยให้คุณทำเครือข่ายที่ใช้แพ็กเก็ตด้วยความน่าเชื่อถือที่ 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 ();
}