Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Поможите с UDP   Найти похожие ветки 

 
-=IVA=- ©   (2004-06-14 14:47) [0]

Пытаюсь отослать картинку (jpg) по UDP, выдает ошибку:
"Package size too big"
Что делать ?!


 
Verg ©   (2004-06-14 15:26) [1]

Передавать кусками


 
-=IVA=- ©   (2004-06-14 15:31) [2]

Изображение весит 742 байта, это много разве?

Пожно подробнее ? А то почитав форум, я толком так ничего и не понял.


 
Verg ©   (2004-06-14 15:40) [3]


> [2] -=IVA=- ©   (14.06.04 15:31)
> Изображение весит 742 байта, это много разве?


Ага, т.е. про все остальные условия возникновения проблемы тоже надо будет догадываться?

Про способ отправки и того, кто же собственно выдает "Package size too big"?


> Пожно подробнее ? А то почитав форум, я толком так ничего
> и не понял.


Про что подробнее?


 
-=IVA=- ©   (2004-06-14 15:45) [4]

Вобщем так:
Использую IdUDPServer&Client
У клиента значение BufferSize стоит 8192, картинка весит 3568, отправляет только тогда, когда я пишу
IdUDPClient1.SendBuffer(ms,1467);
Иначе, если значение поставить даже 1468, то выдает ошибку...

Подробнее, про то, как кусками слать, если это ооочень большой файл будет.


 
Verg ©   (2004-06-14 15:58) [5]

Кто такой ms ?


 
-=IVA=- ©   (2004-06-14 16:06) [6]

ms - TMemoryStream


 
Verg ©   (2004-06-14 16:09) [7]


> [6] -=IVA=- ©   (14.06.04 16:06)
> ms - TMemoryStream


Начни с того, что поправь


> IdUDPClient1.SendBuffer(ms.memory^,....);


А то ты пытаешься отправить указатель на экземпляр класса MemoryStream, а не содержимое этого стрема.


 
-=IVA=- ©   (2004-06-14 16:13) [8]

Здорово, спасибо...
Теперь еще :)
1. Что бы это значило ? (memory^)
2. Так как картинка весит 3568, а отсылаю я только 1467, она у меня на половину показывается. Как бы теперь это решить.


 
Verg ©   (2004-06-14 16:15) [9]


> Так как картинка весит 3568, а отсылаю я только 1467, она
> у меня на половину показывается. Как бы теперь это решить.


Отсылай 3568, а не 1467.


>  Что бы это значило ? (memory^)


Почитай про TMemoryStream в help-е.


 
-=IVA=- ©   (2004-06-14 16:16) [10]

Хотя наеврное я понял...
Надо посчитать в начале сколько она весит, потом разделить все это на 1467 и того получается в 2 с остатком приема она перешлется...
Хотя вообще странно, почему только 8192 байта можноотсылать


 
Verg ©   (2004-06-14 16:28) [11]


> [10] -=IVA=- ©   (14.06.04 16:16)
> Хотя наеврное я понял...
> Надо посчитать в начале сколько она весит, потом разделить
> все это на 1467 и того получается в 2 с остатком приема
> она перешлется...
> Хотя вообще странно, почему только 8192 байта можноотсылать


Чего? Зачем делить на 1467? Ты это откуда взял это число?

UDP - протокол для передачи датаграмм без гарантии доставки и без гарантии последовательности.

Максимальный размер информационной части передаваемой UDP датаграммы можно узнать из опции SOL_SOCKET по имени SO_MAXDG (getsockopt). И для Win2K она равна что-то около 65000.


 
-=IVA=- ©   (2004-06-14 16:32) [12]

Это число я взял путем подбора...
Так как я писал изначально
IdUDPClient1.SendBuffer(ms.memory^,ms.Size);
Выдавалась ошибка о том, что пакет мол большой.
Я начал его понижать...и в итоге самое максимальное , что я могу отослать (что бы не возникала такая ошибка), это 1467...
Если ставлю больше - сразу ошибка (Package size too big);


 
Verg ©   (2004-06-14 16:42) [13]

Не-ет уж, изначально ты написал


> IdUDPClient1.SendBuffer(ms, ms.Size);


И по идее у тебя могла случаться ошибка WSAEFAULT, т.к. ты затавлял обращаться к "левому" диапазону адресов ВАП.


> IdUDPClient1.SendBuffer(ms.memory^,ms.Size);


Ты так реально пробовал?

Одним словом, прекрасно отсылаются датаграммы любого, разрешенного размера (вплоть до 65507).


 
-=IVA=- ©   (2004-06-14 16:44) [14]

ms:=TMemoryStream.Create;
ms.Position:=0;
Image1.Picture.Graphic.SaveToStream(ms);
ms.Position:=0;
IdUDPClient1.SendBuffer(ms.memory^,ms.Size);
ms.Free;


Вот...зачем мне врать...полный текст отправки
Может в другом месте ошибка?


 
Verg ©   (2004-06-14 18:28) [15]


> [14] -=IVA=- ©   (14.06.04 16:44)


ms.size > предельный размер датаграммы, который можно получить
var
   MaxDS, SzSz : integer;
.................
 SzSz := sizeof(MaxSZ);
 getsockopt(IDUDPClient1.Binding.Handle, SOL_SOCKET,
                 SO_MAXDG, pchar(@MaxDS), SzSz);

Все, других причин быть не может.
Проверяй ms.Size.


> Вот...зачем мне врать...полный текст отправки


Ну и мне незачем - у меня подобный код работает без проблем.

procedure TForm1.Button2Click(Sender: TObject);
var Buffer : array[0..10000] of byte;
begin
 IdUDPClient1.SendBuffer(Buffer, sizeof(Buffer));
end;


 
-=IVA=- ©   (2004-06-14 18:37) [16]


> procedure TForm1.Button2Click(Sender: TObject);
> var Buffer : array[0..10000] of byte;
> begin
>  IdUDPClient1.SendBuffer(Buffer, sizeof(Buffer));
> end;


Странно все это, у меня не пашет :(



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1091387445
san
2004-08-01 23:10
2004.08.15
Open Excel and Edit


14-1091016286
Vlad Oshin
2004-07-28 16:04
2004.08.15
Край березового ситца. Рассказ.


1-1091010419
Марковка
2004-07-28 14:26
2004.08.15
Treeview


1-1091184470
ИМХО
2004-07-30 14:47
2004.08.15
Application.Terminate


1-1091166407
П7
2004-07-30 09:46
2004.08.15
Элементы TTreeView и Drag n Drop





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский