![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция Recv и PChar
Alral © (2008-08-30 18:36:00)Здравствуйте.
У меня следующий вопрос: какой тип буфера необходим для функции Recv? При использовании PChar возвращается ошибка : "Acess violation...". При использовании Array of Char также возникает ошибка. Со статическим массивом всё работает, но я хотел бы иметь возможность либо самостоятельно задавать размер буфера, либо использовать String или PChar. Возможно ли это?
Спасибо.
Anatoly Podgoretsky (2008-08-30 22:15:00) [1]> Сергей М. (30.08.2008 21:55:25) [25]
Другие методы я просто не затрагивал, его решение и необычное использование string
Сергей М. (2008-08-30 21:55:00) [2]
3.
var pSomeRecvBuf: SomePointer;
ecv(sClient, pSomeRecvBuf ^, скоко_надо_но_не_более_размера_буфера_адрес_которого_находится_в_переменной_pSom eRecvBuf, 0);
Anatoly Podgoretsky (2008-08-30 21:52:00) [3]
> var chRecvBuf: Array [0..1024] of Char;
> ...
> Recv(sClient, chRecvBuf, 1024, 0);
> Как избавиться от этого ограничения?
1.
var chRecvBuf: Array [0..1025 of Char;
Recv(sClient, chRecvBuf, 1025, 0);
...
2.
var chRecvBuf: string;
...
SetLength(chRecvBuf, 4096)
Recv(sClient, chRecvBuf[1], Length(chRecvBuf), 0);
Сергей М. (2008-08-30 21:51:00) [4]
> Alral © (30.08.08 21:43) [21]
Ты посмотри повнимательней на реализацию методов TCustomWinSocket.SendBuf/SerdStream (scktcop.pas) и удивись. и почеши репу. И задай вопросы. И сделай выводы)
Сергей М. (2008-08-30 21:47:00) [5]
> А передавать данные за несколько заходов я смысла не вижу
А вот ребята из Борланда видят.
Вот ведь чудики они, да ?
Alral (2008-08-30 21:43:00) [6]Нет. Просто зачем создавать массив размером 1 килобайт если можно создать динамический массив который будет гораздо меньше и настраивать его по своему усмотрению.
А передавать данные за несколько заходов я смысла не вижу, т.к. передавать большой обьём не планирую.
Сергей М. (2008-08-30 21:35:00) [7]
> Alral © (30.08.08 21:31) [19]
А вот ребята из бывшего Борланда "резервируют" всего 4Кб и в ус не дуют - и юзеры через ихние компоненты как-то умудряются гонять десятки гигабайт данных.
Чудеса в решете, да ?)
Alral (2008-08-30 21:31:00) [8]
> Сергей М. © (30.08.08 21:26) [17]
Не собираюсь много. Просто не хочу резервировать килобайты данных, а выбирать в процессе работы программы по мере необходимости.
Alral (2008-08-30 21:28:00) [9]О работе с памятью в той литературе, которая у меня есть, не сказано ничего.
> Юрий Зотов © (30.08.08 21:18) [15]
,
> Германн © (30.08.08 21:23) [16]
Спасибо.
С уважением, Александр.
Сергей М. (2008-08-30 21:26:00) [10]
> Как избавиться от этого ограничения?
А нахрена за 1 раз толкать в поток(!) более "кило символов" ?
Германн (2008-08-30 21:23:00) [11]
> Максимальный размер полученных данных составляет при этом
> 1024 символа.
> Как избавиться от этого ограничения?
>
var chRecvBuf: Array of Char;
SetLength(chRecvBuf,2098); 2098 просто для примера
Recv(sClient, chRecvBuf [0], 2098, 0);
Юрий Зотов (2008-08-30 21:18:00) [12]> Alral © (30.08.08 21:07) [14]
Работа с указателями и динамической памятью почти всегда происходит по одной и той же схеме:
var
Len: integer;
Buff: Pointer;
...
Len := Сколько_надо;
GetMem(Buff, Len);
try
Что-то делаем с Buff
finally
FreeMem(Buff)
end;
В реале, этот код может быть разнесен по разным местам программы, но его суть от этого не меняется.
Alral (2008-08-30 21:07:00) [13]В данный момент использую такой:
...
var chRecvBuf: Array [0..1024] of Char;
...
Recv(sClient, chRecvBuf, 1024, 0);
...
Максимальный размер полученных данных составляет при этом 1024 символа.
Как избавиться от этого ограничения?
Сергей М. (2008-08-30 20:37:00) [14]
> Alral © (30.08.08 20:16) [11]
Покажи свойкод ..
Anatoly Podgoretsky (2008-08-30 20:29:00) [15]> Alral (30.08.2008 20:16:11) [11]
Мало вероятно найти книгу по работе с указателями, слишком маленькая часть Паскаля, кроме того это относится к базовым знаниям.
Alral (2008-08-30 20:16:00) [16]Раньше ответить не мог.
В данной теме я разбираюсь плохо, поскольку до её применения дело раньше не доходило, а соответствующей литературы у меня нет.
Если можно, не могли бы вы дать ссылки на данную тему, так как в тех книгах, которые у меня есть, я эту тему не нашёл.
Спасибо.
Сергей М. (2008-08-30 20:01:00) [17]Но там, думается, все гораздо проще - непонимание существования и сути разыменования указателей.
Сергей М. (2008-08-30 19:59:00) [18]
> Anatoly Podgoretsky © (30.08.08 19:52) [8]
Что ж .. Гарантирую немедленное исключение А.П. (С) из приватных списков мартышек без очков !
))
Anatoly Podgoretsky (2008-08-30 19:52:00) [19]> Сергей М. (30.08.2008 19:51:07) [7]
Это для тех кто видит.
Сергей М. (2008-08-30 19:51:00) [20]Ну точно - мартышка она и есть к старости)
Теперь вижу что нихрена не вижу)