Я на си делал так. Имелись клиенты с серыми IP которым нужно рассылать трафик по udp с сервера, у которого постоянный ip. От клиента инициировал соединение по tcp, это позволяет определить маршрут до клиента, через который можно свободно посылать UDP данные даже за нат с серыми ip.
чет тут и я подвис... а как так можно? там же при создании сокета, насколько я помню, указывается его тип, и если сокет TCP, то и данные по нему как по TCP будут отправляться же, а для создания сокета UDP для отправки данных клиенту, нужно же его адрес указывать, а если он сервый, то он же не доступен будет