Прием всех пакетов, приходящих на сокет машины

206
26 ноября 2016, 19:02

Скажите пожалуйста, каким образом следует организовывать сокет на Qt таким образом, чтобы он ловил все пакеты, приходящие на указанную пару IP:порт? На C# я делал что-то вроде

 BoardListen_1 = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);  
 BoardListen_1.Bind(new IPEndPoint(IPAddress.Parse("192.168."+Local_Ip.Text), 67));
 BoardListen_1.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded,true);
 byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
 byte[] byOut = new byte[4] { 1, 0, 0, 0 }; 
 BoardListen_1.IOControl(IOControlCode.ReceiveAll,  byTrue, byOut);
 BoardListen_1.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,  new AsyncCallback(OnReceive), null);

На Qt можно организовать что-то подобное?

Answer 1

Если требуется безотносительно протоколов TCP или UDP, то для открытия такого сокета используйте нативный для операционной системы код. Фреймворк Qt кроссплатформенный, а значит всё платформозависимое упрятано там в приватные классы.

Тем не менее, если имеется дескриптор нативного сокета, то можно использовать непосредственно QAbstractSocket. У этого класса имеется метод setSocketDescriptor(), который и позволит подключить уже созданный сокет к Qt-приложению.

UPDATE

Хотя, возможно стоит попробовать использовать QAbstractSocket::bind() напрямую. Метод не чисто виртуальный и, вероятно, откроет сокет на прослушивание в том виде, в котором требуется.

READ ALSO
Объявление констант через extern

Объявление констант через extern

Вылезает ошибка при объявлении константы:

220
Указатель на массив C++

Указатель на массив C++

Пусть имеем статический массив:

203
проблема в указателях

проблема в указателях

здравствуйте, пишу односвязный список, вот кусок:

195
Простейшая задача на алгоритмизацию и SIGSEGV

Простейшая задача на алгоритмизацию и SIGSEGV

Есть простейшая задача: Найти k-ое простое число

187