![]() |
|
![]() ![]() ![]() |
|
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Добрый день!
Как правильно отправить структуру через TidUDPClient->SendBuffer у меня не получается пере конвертировать её в TByteDynArray ! как её потом корректно принять? (пере конвертировать обратно)... |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Я бы сохранил её в поток и отправил. Потом принял и прочитал из потока.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
подскажи код пожалуйста !
|
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Хм... не нашёл у TidUDPClient метода WriteStream . А уTidTCPClient он есть...
Ну да ладно. Попробуйте так:
Хотя я так не пробовал... Либо отправляйте по частям:
Это сообщение отредактировал(а) artsb - 25.4.2009, 18:13 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Я видел как то просто отправляли структура (в одном примере) просто там как параметры был указатель а не TByteDynArray.
мне так проще пременные послать подугому.... (( разве нет других вариантов ? |
|||
|
||||
artsb |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Вот пример:
Этот пример работает. Но только со структурой статического размера. По идеи, надо отправить сначала размер структуры, а потом саму структуру. А на сервере - получить размер структуры, а уже потом читать её. IdUDP работает не так как IdTCP. Там было просто:
А вот с IdUDP такое не прокатывает. При таком коде:
отправляется и то, и то. А вот приход только размер, т.е. AData->Size = 4. Ну естественно, при попытке прочитать что-то после чтения размера, вылетает экскепшин. Есть подозрение, что за раз приходит только одна порция отправленных данных. По идее, структура придёт позже ![]() ![]() В общем, тут надо что-то придумывать, либо юзать IdTCP. Это сообщение отредактировал(а) artsb - 26.4.2009, 21:57 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||||
|
|||||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Хорошо, а как мне выбрать оптимальный размер БУФЕРА для передачи?
К примеру я кусочками передаю файл, мне надо подобрать такой размер буфера что бы максимально нагрузить канал .... |
|||
|
||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Дело в том, что у меня версия Indy вообще не содержит в себе SendBuffer(void *,int size), есть SendBuffer(String IP,int Port,TByteDynArray data)
Вот что я написал, по моей задаче
(поправьте, если что не так) И осталось заменить строку " //ЗДЕСЬ ms ПЕРЕВОДИМ В dynArray" на что-то, а на что именно не подскажете? |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Об этом не парьтесь. Учитывая то, какие сейчас машины, имхо, это роли не играет. размер буфера влияет на то, сколько оперативки будет жрать Indy. Ведь при отправке инфы, она её на самом деле не отправляет до тех пор, пока не наполнится полный буфер. Только после наполнения, весь буфер отправляется и после чего - очищается.
Хм... Не может быть. Что у вас за версия? А вы не пробовали так:
Опять таки, в случае с UDP тяжелее организовать приём данных. Надо подумать... ЗЫ а почему именно UDP? Почему не TCP? Это сообщение отредактировал(а) artsb - 5.5.2009, 22:12 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
У меня та что идёт с 2009-м Быдлем тобишь... 11-ая вроде ?
Та я вот уже сам задумываюсь может всё такие перейти на TCP дело в том что надо передавать довольно большие файлы по сети и там буду всякие зависания (блокирующиеся сокеты и т.п.) Передавать надо в несколько независимых каналов (потоков) и ещё и то туда то обатно. Добавлено через 2 минуты и 54 секунды ![]() |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
На сколько я помню, у Indy есть компонент IdAntifreeze. Он вроде как борется с этим. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |