Ethernet komunikace - PC UDP server problém
Napsal: 23 říj 2016, 13:48
Je tu už ode mne měsíc staré vlákno se souvisejícím tématem, ale raději zakládám nový...
Krátký brýfýnk: mám vývojový kit s AD převodníkem a fpgačkem připojený k PC přes ethernet. Na PC chci posílat bursty dat - UDP pakety obsahující offset a vzorky z AD převodníku.
Do teď jsem blbnul na straně PC s Wiresharkem a utilitkou Packet sender a vše vypadalo ok.
Chtěl jsem si na straně PC udělat nějaké základní zpracování v Matlabu, tak jsem z dostupných materiálů (http://www.binarytides.com/udp-socket-p ... n-winsock/) na straně PC udělal přes widláckou knihovnu Winsock primitivní UDP server - v nekonečné smyčce přes recvfrom tahám data a ty chci ukládat do textového souboru, který pak sežere Matlab/Octave.
Problém je, že tahle jednoduchá aplikace nechytá všechny UDP datagramy. Počítal jsem s nějakou ztrátovostí, ale 50% je prostě moc. Nechápu proč třeba sniffer jako Wireshark mi pakety zachytí všechny - v nejhorším případě bych to mohlo logovat z něho a pak ten soubor přebastlit pro matlab, ale to je krapec na nic...
Částečným řešením je snížit datovou rychlost z kitu - dát zpoždění mezi odesíláním jednotlivých paketů. Potom server zachytí všechno.
Zatím nemám problém s dosažením požadované rychlosti - z principu funkce cílová aplikace potřebuje např navzorkovat 100-200ms každou sekundu, takže ve zbývajícím čase je dostatek času na nějaký výpočetní výkon...jen mě irituje proč ten Wireshark chytá vše (ještě s analýzou datagramu) a primitivní kód v Cčku inkrementující jen čítač zachycených udp paketů na určitém port mi zachytí cca polovinu paketů.
Tušíte někdo, čím by to mohlo být?
Krátký brýfýnk: mám vývojový kit s AD převodníkem a fpgačkem připojený k PC přes ethernet. Na PC chci posílat bursty dat - UDP pakety obsahující offset a vzorky z AD převodníku.
Do teď jsem blbnul na straně PC s Wiresharkem a utilitkou Packet sender a vše vypadalo ok.
Chtěl jsem si na straně PC udělat nějaké základní zpracování v Matlabu, tak jsem z dostupných materiálů (http://www.binarytides.com/udp-socket-p ... n-winsock/) na straně PC udělal přes widláckou knihovnu Winsock primitivní UDP server - v nekonečné smyčce přes recvfrom tahám data a ty chci ukládat do textového souboru, který pak sežere Matlab/Octave.
Problém je, že tahle jednoduchá aplikace nechytá všechny UDP datagramy. Počítal jsem s nějakou ztrátovostí, ale 50% je prostě moc. Nechápu proč třeba sniffer jako Wireshark mi pakety zachytí všechny - v nejhorším případě bych to mohlo logovat z něho a pak ten soubor přebastlit pro matlab, ale to je krapec na nic...
Částečným řešením je snížit datovou rychlost z kitu - dát zpoždění mezi odesíláním jednotlivých paketů. Potom server zachytí všechno.
Zatím nemám problém s dosažením požadované rychlosti - z principu funkce cílová aplikace potřebuje např navzorkovat 100-200ms každou sekundu, takže ve zbývajícím čase je dostatek času na nějaký výpočetní výkon...jen mě irituje proč ten Wireshark chytá vše (ještě s analýzou datagramu) a primitivní kód v Cčku inkrementující jen čítač zachycených udp paketů na určitém port mi zachytí cca polovinu paketů.
Tušíte někdo, čím by to mohlo být?