#c
Вопрос:
О, все могучие гуру кодирования, услышь мою мольбу, Склоняйся
Я относительно новичок в C , и я пытаюсь заставить сервер агентов работать на компьютере с Windows и возвращать статистику при опросе клиентской программой. Я уже создал UDP-связь (для скорости) и выяснил, как сообщать об использовании памяти, процессора и дискового пространства. Мне трудно понять, как получить статистику сети для данного адаптера.
Мой план таков: вы предоставляете программе номер индекса интерфейса, и она выдает сетевые биты в секунду, как полученные, так и отправленные. Таким образом, я могу отслеживать использование сети и видеть, не захлопывается ли адаптер (аналогично тому, что вы видите в диспетчере задач).
Причина этого в том, что SNMP в Windows имеет только 32-битные целые числа, что нормально, если пропускная способность вашей сети составляет 100 Мбит / с, но когда она гигабитная, счетчик обтекается быстрее, чем я могу его опросить, что дает ненадежные результаты.
Есть ли какой-нибудь способ сделать это?
Комментарии:
1. Трудно по-настоящему комментировать, не видя кода для вызовов API, которые вы используете. Но вы читали это? docs.microsoft.com/en-us/windows-hardware/drivers/network/… — в частности, структура NDIS_INTERFACE_ИНФОРМАЦИИ, по-видимому, поддерживает 64-разрядные счетчики.
2. Взгляните наGetIfEntry()
и связанные с этим функции3. Я смотрел на GetIfEntry2, который выглядит так, как будто это то, что мне нужно (возможно): TransmitLinkSpeed; ReceiveLinkSpeed; вот пример кода я щекочу и пытаюсь работать, но я получаю «‘GetIfEntry2’ не был объявлен в этой области», я использую код::блоки в качестве интегрированной среды разработки: pastebin.com/hKFxtZNY
4. Поцарапайте это, заставьте его работать через Visual Studio. Хотя две вещи, которые я перечислил, показывают только максимальную скорость. Есть ли что-нибудь, что показывает текущую скорость?
5. Пожалуйста, если вы нашли решение, создайте ответ на свой вопрос. Если у вас есть новый вопрос, пожалуйста, создайте новый пост с вопросом.