Ho reso il mio server UDP e client con boost :: asio socket udp. Tutto sembrava a posto prima di iniziare a inviare più datagrammi. Arrivano correttamente da client a server. Ma, sono uniti nel mio buffer in un unico messaggio.Come dividere ricevuto con boost asio udp socket datagrammi uniti
Io uso
udp::socket::async_receive
con std::array<char, 1 <<18>
tampone
per fare richiesta asincrona. E ricevere dati tramite callback
void on_receive(const error_code& code, size_t bytes_transferred)
Se invio dei dati troppo spesso (ogni 10 millisecondi) che ricevo diversi datagrammi contemporaneamente nel mio buffer con richiamata sopra. La domanda è: come separare separato da? Nota: i datagrammi UDP hanno lunghezza variabile . Non voglio usare l'intestazione aggiuntiva con le dimensioni, perché renderà il mio codice inutile per i datagrammi di terze parti.
Potresti mostrare il tuo codice? –
Utilizzare una funzione di callback fornita dall'utente nel messaggio 'on_receive', che elabora tutti i messaggi inclusi nel singolo pacchetto ricevuto. – Chad
Certo, potrebbe essere trovato qui: [udp2tcp_tunnel] (https://github.com/valery-l/udp2tcp_tunnel). È in corso - ancora un piccolo server ping-pong (che invia via TCP dal client, ricevendo lo stesso messaggio di test dal server di UDP). Mi sembra di aver trovato il problema. Se invio vari buffer in ** sequenza buffer ** da 'basic_datagram_socket :: async_send_to (buffer_sequence, handler)', arriverà come ** un ** datagramma (non ** un ** datagramma per ** ogni buffer * *). –