Название: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Разуев Максим от Август 21, 2008, 18:12 У меня две проблемы с QUdpSocket:
1)Почемуто максимальный размер пакета составляет 1500 байт. При большем размере пакет херится и все данные перемешиваются. 2)Есть 2 проги - одна формирует и посылает пакет, другая принимает. При отправке пакета на localhost все работае нормально. Но при указании broadcast пакет не проходит. bind возвращает false. Может что то надо в системе разрешить. Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Admin от Август 22, 2008, 11:02 по поводу 1500 - очень похоже на MTU значение - это сегментирование данных в tcp/ip сетях
Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Alex03 от Август 22, 2008, 13:23 1500 для Ethernet. Максимальный размер данных во фрейме Ethernet составляет 1500 байт, при этом 1472 байта предназначены для пользовательских данных, 20 байт отводится под IP заголовок и 8 байт под UDP заголовок.
Для др. сетей может быть другие. Например у моёго localhost в линуксе MTU:16436. По идее при передаче IP датаграммы с размером больше чем MTU она должна фрагментироваться на пакеты (если в IP заголовке не запрещено), а на приёмной стороне должна быть сборка датаграммы из пакетов, в том числе и для UDP и в том числе прозрачно для пользователя стека. С другой стороны фрагментирование - вещь довольно неприятная, особенно когда один из фрагментов не доходит. Поэтому рекомндуют не передавать по UDP более 576-20-8=548 байт. 576 - минимальный MTU для IP пакета который должен поддерживаться всеми сетями. По поводу второго вопроса - всякие антивирусы и брандмауэры сейчас очень любят всё запрещать. Примеры Broadcast Sender и Broadcast Receiver в Вашей сети пашут? Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Разуев Максим от Август 22, 2008, 17:14 Сеть собственная. Домен с сервером Windows 2003 Server и нескольких компьютеров под WinXPSp2.
Сегодня пробовал разные варианты адресов. Работает если на передатчике и приемнике QHostAddress::Any и если на обоих QHostAddress::LocalHost но запущены на одной машине. При QHostAddress::BroadCast в диспетчере задач сеть загружается но приемник ничего ни принимает. Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Alex03 от Август 26, 2008, 08:06 ИМХО
Если Вам надо на приёмнике получать от всех, то в bind() передавайте QHostAddress::Any, т.е. принимать от всех/любого. В передатчике же, чтобы передавать широковещательные пакеты, в writeDatagram() надо передавать QHostAddress::BroadCast. Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: Разуев Максим от Август 31, 2008, 19:45 Так работает, но только на машине с сетью. Если сети нет работает только localhost.
Так же как всетаки разобраться с размером пакета. Название: Re: [4.4.1-win32]Проблема с QUdpSocket Отправлено: McMastertwist от Сентябрь 01, 2008, 16:12 ИМХО правильно Если Вам надо на приёмнике получать от всех, то в bind() передавайте QHostAddress::Any, т.е. принимать от всех/любого. В передатчике же, чтобы передавать широковещательные пакеты, в writeDatagram() надо передавать QHostAddress::BroadCast. |