Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция Recv и PChar


Страницы:   1 2

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]

Ну точно - мартышка она и есть к старости)

Теперь вижу что нихрена не вижу)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо