IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с сетью: Udp, Не пролазят большие пакеты
сообщение
Сообщение #1


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Привет! Скажите пожалуйста, есть ли в Дельфийском компоненте TNMUDP какие-либо ограничения на размер посылаемого буфера? По идее, сам протокол UDP никаких ограничений не имеет. Но если я пытаюсь послать буфер размером чуть больше 4-х килобайт, его просто не получают sad.gif( Даже если я его себе самому посылаю, не получаю.

С пакетами примерно в килобайт все нормально.

Не предлагайте только дробить длинные сообщения -- протокол, который я пытаюсь реализовать, придумывал не я +)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Неужели никто не знает? Блин, пока проблему обошел, но скоро, чувствую, опять она меня иметь будет...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Мужской

Репутация: -  2  +


Хм.. вот не знаю..а ты попробуй так, послать очень большой , а потом постепенно уменьшать пока не отправиться!


--------------------
* Origin: "It's MY LIFE!!! © Jhon Bon Jovi"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Ну на самом деле есть определенный протокол, который я хочу сымитировать. Точнее:

-- Есть программа, которая мне не нравится
-- Есть программист, которому так надоели стоны, что, дескать, "программа у тебя кривая", что он выложил протокол и сказал: "Кому не нравится -- VisualStudio вам в руки =)" (ну я Дельфи взял=)
-- Есть не в меру заносчивый trminator, который взялся писать прогу "под себя" (впрочем, кое-что она уже делает лучше =) можно еще ускорять)

Некоторые сообщения могут достигать такого размера. Хорошо, что не все =) На их существование я пока забил, но все-таки.. нехорошо это

ЗЫ Килобайт точно передается. Точнее не определял.


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Мужской

Репутация: -  2  +


Дай заценить что она щас умеет?


--------------------
* Origin: "It's MY LIFE!!! © Jhon Bon Jovi"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Не дам =) нашел багу =) гнусную


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


я как раз занимаюсь сейчас клиент-серверным пакетом тоже на компонентах NMUDP, точнее он уже два месяца как активно используется, щас только глюки исправляю smile.gif... опытным путем установил, что максимальный размер буфера для передачи через NMUDP не должен превышать 2 кб, иначе приходит NumberBytes=-1. Это видимо ограничение компонента, рекомендуют использовать Indy, но мне и этого хватает.

Сообщение отредактировано: P@sh@ -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


еще слышал, что дефолтные размеры UDP-пакетов меняются от системы к системе, и желательно ограничиться 4-мя килобайтами, меньше вряд ли будут.

а в NMUDP еще потоковый обмен глючно работает с большими блоками данных (~сотни килобайт), так что лучше не использовать SendStream...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Ну сто кило никто и не пытается послать =)
#define MAX_MSG_SIZE 4096
...
typedef struct
{
unsigned char code;
unsigned char From[16];
unsigned char Subj[64];
int   Time;
unsigned char To[16];
unsigned int IP;
unsigned char Flag;
unsigned char Text[MAX_MSG_SIZE];
} MSG_TAKE_NEWS_STR;
Вот такую бяку посылать надо (и принимать). На самом деле, от последнего массива можно посылать только "хвост" -- то, что там является текстом

А еще меня бесит, что строки -- не строки, а массивы символов. Геморроя с этим... Короче все выкинул, начал писАть заново B)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


причем не любые массивы символов, а только СТАТИЧЕСКИЕ!!

на компоненте NMUDP очень легко сделать чат, но для серъезных приложений наверное лучше что-нибудь другое...

ну кто не пытается 100 кб послать, а кто и мегабайты перекачивает... пришлось вот чуть ли не фтп-протокол писать упрощенный smile.gif думаешь, сколько времени будет мегабайт передаваться пакетами по 2кб?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Это как раз чат =) с возможностью посылки "новостей" (по сути -- instant messaging'ом, только эту "новость" можно послать всем сразу). Им польхзуются около 700 человек (в нашей сетке). И проблема как раз с получением новостей (из-за нее я и начал писАть все по новой =) )

На бумажке все просто: посылвешь запрос на новость, получаешь ответ -- заголовки сообщений. Смотришь, есть ли у тебя такие заголовки (не устарела ли новость), если нет -- просишь передать ее целиком. На практике заголовки получаю всегда, а новости -- примерно 20%

---
И, кстати, не факт, что по 2 кило не быстрее, чем сразу метр =) Для TCP, например, небольшие пакеты выгоднее посылать


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


я разве говорил, что медленнее? я просто для прикола спросил smile.gif
на самом деле передается довольно быстро, если учесть, что объем удваивается за счет подтверждающих пакетов с контрольной суммой (их размеры конечно гораздо меньше, но какая разница, если передаются они одинаково), только потери бывают часто (сеть у нас довольно перегруженная)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Ладно, попробую Инди присобачить...
Спасибо


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


На самом деле размер пакета ограничиваестя железом а не программно, на сколько помню не более 1400 байт. Но пакеты можно делить на фреймы, а на приемной стороне их собирать учитывая их последовательность, т.к. маршрут прохождения фреймов может быть разный в сложных сетях. Это дробление чисто программная вешь, по идее должна реализовываться на уровне протокола (TCP UDP и т.д.)


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Так по идее-то это должно быть прозрачно для пользователя (ну и программиста тоже). Ан нет, не совсем...

Вот будет время - доложу про испытания Indy. только там переписывать прилично -- в Инди это разделено на клиент и сервер. Зачем, интересно...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


trminator
я недавно решил все же глянуть в хелп по сокетам, и почти сразу возник вопрос - нахрена я мучался-разбирался со всякими Indy и NM-компонентами? то, что мне было нужно, легко реализовывалось с помощью стандартных виндовых сокетов!
посмотри стандартные демки двух чатов - не намного сложнее, чем на NMUDP

PS: что значит "зачем разделено на клиент и сервер" ? даже в UDP необходимо как-то принимать пакеты, а не только отправлять, а для приема надо ждать и проверять состояние порта (listen - "слушать"), чем и занимается серверная часть программы (в NMUDP это делается незаметно для пользователя, только вызывается событие OnDataReceived, когда пакет пришел)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Погоди... сокеты разве не только TCP? (глупый вопрос, наверное...) Спасибо, посмотрю
Цитата
зачем разделено на клиент и сервер

Да не обращай внимания, стормозил просто :P Привыкнуть уже успел к TNMUDP

После сессии вплотную заняться надо


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 19:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name