Скажите пожалуйста, каким образом следует организовывать сокет на 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 можно организовать что-то подобное?
Если требуется безотносительно протоколов TCP или UDP, то для открытия такого сокета используйте нативный для операционной системы код. Фреймворк Qt кроссплатформенный, а значит всё платформозависимое упрятано там в приватные классы.
Тем не менее, если имеется дескриптор нативного сокета, то можно использовать непосредственно QAbstractSocket
. У этого класса имеется метод setSocketDescriptor()
, который и позволит подключить уже созданный сокет к Qt-приложению.
UPDATE
Хотя, возможно стоит попробовать использовать QAbstractSocket::bind()
напрямую. Метод не чисто виртуальный и, вероятно, откроет сокет на прослушивание в том виде, в котором требуется.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором