Zrobiłem mój serwer UDP i klienta z boost :: asio udp gniazda. Wszystko wyglądało dobrze, zanim zacząłem wysyłać więcej datagramów. Przychodzą poprawnie od klienta do serwera. Ale są zjednoczeni w moim buforze w jedną wiadomość.Jak podzielić otrzymane z boost asio udp gniazda united datagramy
użyć
udp::socket::async_receive
z std::array<char, 1 <<18>
buforze
do wykonywania żądania transmisji asynchronicznej. I odbieranie danych poprzez oddzwonienie
void on_receive(const error_code& code, size_t bytes_transferred)
Gdybym wysyłać dane zbyt często (co 10 milisekund) Otrzymuję kilka datagramów równocześnie do mojego bufora z zwrotnego powyżej. Pytanie brzmi - jak je oddzielić od? Uwaga: moje datagramy UDP mają o zmiennej długości. Nie chcę używać nagłówka dodatkowego o rozmiarze, ponieważ spowoduje on, że mój kod będzie bezużyteczny dla datagramów firm trzecich.
Czy możesz pokazać swój kod? –
Użyj funkcji zwrotnej dostarczonej przez użytkownika w wiadomości 'on_receive', która przetwarza wszystkie zawarte wiadomości w pojedynczym odebranym pakiecie. – Chad
Oczywiście, można go znaleźć tutaj: [udp2tcp_tunnel] (https://github.com/valery-l/udp2tcp_tunnel). Trwa to - jeszcze trochę ping-ponga (wysyłanie przez TCP z klienta, otrzymywanie tej samej wiadomości testowej z serwera od UDP). Wydaje mi się, że znalazłem problem. Jeśli wyślę kilka buforów w ** sekwencji buforowej ** przez 'basic_datagram_socket :: async_send_to (buffer_sequence, handler)', przyjdzie on jako ** jeden ** datagram (nie ** jeden ** datagram dla ** każdego bufora * *). –