#sockets #tcp #udp #buffer
#сокеты #tcp #udp #буфер
Вопрос:
Я работаю над Windows с C #, но это скорее общий вопрос. Если я получаю UDP-пакеты с помощью UDP-клиента, они обычно удаляются из буфера приема, поэтому другие программы не могут получить доступ к этим данным. Мои эксперименты показали, что это не относится к сообщениям boradcast. Если я подключу несколько программ к одному и тому же порту UDP и вызову функцию приема, оба приложения смогут видеть широковещательные пакеты, но только одно приложение сможет видеть одноадресные пакеты, поскольку они удаляются при первом чтении ОС?? Я думаю …?
Мой вопрос в том, есть ли способ изменить поведение этого сокета? могу ли я настроить свой сокет для сохранения этих данных, чтобы вторая программа также могла получить к нему доступ? Или это невозможно?
общая цель, как вы можете догадаться, заключается в том, чтобы программы multible получали одни и те же пакеты UDP, отправляемые по одноадресной рассылке.
Ответ №1:
После долгих исследований я могу подтвердить, что это невозможно с одноадресными пакетами. Вы можете использовать PCAP для достижения этого, но не с помощью собственного UdpClient
Комментарии:
1. Рассматривали ли вы возможность использования nfqueue? Вы можете перенаправлять пакеты в nfqueue с помощью iptables, а затем считывать их из пользовательского пространства. Программа пользовательского пространства контролирует, находится ли пакет в очереди или нет.
2. Эй, Солод, это для меня ново, я изучу это! Спасибо!