![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Misha_White |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Почему именно 4 байта? Если Stream.Size=~64134, если это размер моего стрима, то почму нельзя указать его?
Как этого добиться? У меня клиент в это время должен отправлять свои данные этому серверу... А если подрят вызывать Recv, то ерунда же получится... CЕРВЕР
КЛИЕНТ
Только не смейтесь пожалуйста, о сенсей! Как нужно сделать? Это сообщение отредактировал(а) Misha_White - 15.5.2007, 02:20 --------------------
Я не волшебник... я только учусь... |
||||||||
|
|||||||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
уже лучше.
Потому что 4 байта - это до 2Гб данных. Ты собираешься передавать данные большего размера? Вряд ли... Да и 4 байта - основная еденица в 32-битных системах. С ней удобно работать.
Присасываться на приём нужно только по прибытии данных, иначе повиснешь наглухо.
Не компонент. Данные нужно передавать, и принимать соответственно. DispStream.Memory^, а не сам DispStream. |
||||
|
|||||
| Misha_White |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
А у меня процедурка TClientForm.Socket_Proc_Read_Close(var Msg:TMessage); вызывается только при прибытии данных или если поступило сообщение о закрытии сокета сервером!
Т.е. сообщение NETEVENT_MSG; поступает от сервера только когда он передал данные, либо когда закрыл соединение... Т.е. нужно написать Send(vSocket,DispStream.Memory^,DispSize,0); и все начнет работать? А почему в Делфи у DispStream нету свойства(или метода) Memory? Т.е. DispStream.<Ctrl>+<Spase> ничего не дает? правда я не разыменовывал Memory и не компилировал... Но сейчас попробую... Добавлено через 7 минут и 12 секунд Snowy, Это сообщение отредактировал(а) Misha_White - 15.5.2007, 16:06 --------------------
Я не волшебник... я только учусь... |
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Разумеется.
recv принимает только те данные, которые есть в буфере сокета. Ты должен проверять - если принято меньше, чем указано байт, то нужно подождать, когда придут остальные данные и продолжить приём. Это же не UDP - данные идут потоком, а не приходят за один раз. Поэтому верх у тебя нормальный - он принялся. А полосы ниже - мусор, вместо принятых данных. Остальные данные должны были придти позже. |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
Спасибо! Завтра попробую... или сечас... уже поздно, надо спать... Т.е. получили кусок и вышли из процедуры? Или заLOOPить прием стрима? Это сообщение отредактировал(а) Misha_White - 15.5.2007, 16:37 --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
||||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
--------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
Не могу понять, то-ли я стрим не так принял или че... Ну размеры вроде совпадают... Вот думаю, может во время приема Seek-ать надо в конец полученного куска? Или все-таки с JPEG проблема? Добавлено через 11 минут и 40 секунд Snowy, Достал я тебя походу... Ладно, завтра буду разбираться с этим делом... Это сообщение отредактировал(а) Misha_White - 15.5.2007, 17:53 --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Угу. Memory всегда указывает на начало стрима.
То есть ты постоянно перезаписываешь начало, а дальше не пишешь. Заведи какой-нить буффер килобайта на 4, читай в него и скидывай в стрим, пока не накидаешь нужный размер. В стрим скидывай через метод Write. |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
Че-т ничерта не пойму... А буфер какого типа брать? И как потом Write-ом кидать? --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Любого. Например string отлично подходит.
Только сначала нужно ему длину определить SetLength(s, 4096); А передавать recv и Write не сам стринг, а s[1] |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Misha_White,
Понятно, попробую... А во Write надо вторым параметром Count передавать... Это и будет 4096? Добавлено через 4 минуты и 24 секунды Snowy, Или Столько, сколько возвратит Recv? Добавлено через 8 минут и 32 секунды
Че-то не так.... Добавлено через 11 минут и 6 секунд --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
||||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
это - размер принятого... Чтобы сравнить с DispSize...
Во Write что писать? Err или 4096? --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |