![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись буфера помогите?
r.o.o.t © (2007-07-29 12:39:00)Как записать мне то что хранится в buf в переменную Reply:WideString?
LengthA:=Socket.ReceiveLength;
GetMem(Buf,LengthA);
Socket.ReceiveBuf(Buf^,LengthA);
write(Reply,buf^);Тут надо записать как?
FreeMem(buf);
DVM (2007-07-30 17:34:00) [21]
> Почему происходит утечка памяти???
> т.е. размер приложения в памяти растет на велечину LengthA+30
>
Это ты как выяснил? В Диспетчер задач не гляди - там цифры странные несколько. Проверь c пом. FastMM4 или MemProof
r.o.o.t (2007-07-30 17:30:00) [22]лан все фигня вот следующий вопрос
GetMem(bufA,LengthA);
Socket.ReceiveBuf(bufA^, LengthA);
Reply:=StrPas(bufA)
SockHWND:= StrToInt(ClientID.Strings[i]);
for j := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
if ServerSocket1.Socket.Connections[j].SocketHandle=SockHWND then
begin
ServerSocket1.Socket.Connections[j].SendBuf(bufA^,Length(bufa));
end;
FreeMem(BufA);
Почему происходит утечка памяти???
т.е. размер приложения в памяти растет на велечину LengthA+30
как это возможно ? неправельно освобождается bufA??
r.o.o.t (2007-07-30 17:25:00) [23]Lock;
try
Result := 0;
if (Count = -1) and FConnected then
ioctlsocket(FSocket, FIONREAD, Longint(Result))
else begin
if not FConnected then Exit;
if ioctlsocket(FSocket, FIONREAD, iCount) = 0 then
begin
if (iCount > 0) and (iCount < Count) then
Count := iCount;
end;
Result := recv(FSocket, Buf, Count, 0);
/...............................................................................
я думаю всегда будет i=j
при ReceiveText невсегда реч шла о методе Send/Receivebuf
Сергей М. (2007-07-30 16:54:00) [24]
> Sleep(1000);// жду когда приедет побольше
Галиматья несусветная.
Сергей М. (2007-07-30 16:48:00) [25]
> DVM © (30.07.07 16:38) [36]
А вот и не подеремся)
DVM (2007-07-30 16:38:00) [26]Горячие финские парни!
Евгений вы же уже домой шли :)
Сергей М. (2007-07-30 16:34:00) [27]
> Evgeny V © (30.07.07 16:28) [33]
> Без разницы, у меня был неблокирующий
Да похрену какой он у тебя был, если твой код не работал в глоб.сети, когда твой сервер и/тлт твой клиент разнесены в разные (непредсказуемые) "углы" Тырнета.
Сергей М. (2007-07-30 16:30:00) [28]
> Evgeny V © (30.07.07 16:25) [31]
> Приведи код, где с указанным (проверь возврат функции) где
> это будет не так
>
> 1 Получем ReceiveLength
> 2 Читаем ReceiveLength байт и получаем меньше на возврате
> (но не ошибку -1)
Тебе в код Борланда носом тыкать надо, да ?
Изволь:
function TCustomWinSocket.ReceiveText: string;
begin
SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;
Мне оправдать действия Борланда или сам дотумкаешь ?)
Evgeny V (2007-07-30 16:28:00) [29]
> Сергей М. © (30.07.07 16:23) [30]
> Сергей М. © (30.07.07 16:22) [29]
Блокировку поставь как тебе надо. Без разницы, у меня был неблокирующий. ReceiveLenghth получен до вызова приема в переменную и функция приема считает столько сколько попросил. Ладно все домой, вежливый вы наш. Завтра посмотрю, если у тебя будет код :-))
umbra (2007-07-30 16:28:00) [30]во люди дают, говорят одно и тоже, и при этом ругаются!
Evgeny V (2007-07-30 16:25:00) [31]
> Сергей М. © (30.07.07 16:15) [26]
> Да, I никогда не будет больше J.
И чего ты тогда споришь?
> в то время как в буфере B актуальны всего лишь первые I
> байт !
Да верно, и в его случае правда, что I=J, так как байты уже в очереди или второй вариант - будет ошибка -1
> Evgeny V © (30.07.07 14:03) [7]
> , если по какой-либо причине например не возникнет ошибка.
> Проверить бы не мешало, не трудно ведь:-))
Приведи код, где с указанным (проверь возврат функции) где это будет не так
1 Получем ReceiveLength
2 Читаем ReceiveLength байт и получаем меньше на возврате (но не ошибку -1)
Сергей М. (2007-07-30 16:23:00) [32]
> Evgeny V
Или ты не понимаешь, что методы приема/передачи этого гобъекта ведут себя по-разному в зависимости от состояния этого св-ва ?)
Сергей М. (2007-07-30 16:22:00) [33]
> Evgeny V © (30.07.07 16:17) [27]
И КАКОГО хрена ты не приводишь состояние св-ва, готносящегося к блокировке , коль ты так уверен ?)
Сергей М. (2007-07-30 16:18:00) [34]
> про анализ - возврата функций -согласен
КАКОГО же хрена его нет в твоем коде ?)
Evgeny V (2007-07-30 16:17:00) [35]
> Сергей М. © (30.07.07 16:09) [23]
А вот про анализ - возврата функций -согласен, ну так надо различать, то что тебе написали за 2 минуты для проверки утверждения тут же не отходя от кассы(о чем я и написал, когда выложил код) и рабочий проект. Скажи просто нашел к чему прицепиться. Если я тебе в тесте написал бы
I:= CS1.Socket.SendBuf(b,100) ты бы сразу сказал, ой да, больше принять мы не можем, чем заказали. Да неважно мне сколько он отправил в данном случае. Важно сколько принял... Так что давай свой правильный код с I > тогда посмотрим.
Сергей М. (2007-07-30 16:15:00) [36]Да, I никогда не будет больше J.
Но ведь Автор пытается писать эти J байт в файл, в то время как в буфере B актуальны всего лишь первые I байт !
Сергей М. (2007-07-30 16:13:00) [37]
> пройдись по постам
Ну прошелся.
И по какому же поводу в [16] ты вперся в тему с кодом, не имеющим отношения к сабжу, но содержащим другие серьезные ошибки в очевидно логике ?
Evgeny V (2007-07-30 16:12:00) [38]
> Сергей М. © (30.07.07 16:04) [21]
Все понял.... А результаты теста у себя значит не привел? Или слабо было сделать свой такой же в локальной сети с компа на комп. Я бы сделал, но тебе доказывать наверное бесполезно, потому, что пока аргументов с твоей стороны, кроме как "сам дурак не увидел". Никого кода не увидел в качестве аргумента. Как сделаешь, приведи пожалуйста код, где
i:=Socket.ReceiveBuf(b,j);
и I при этом будет больше J, это же ты хотел сказать в
> Сергей М. © (30.07.07 14:06) [8] Сколько queued, столько
> и вернет
. Правда потом съехал на правильный ответ, ну так сразу надо писать правильно и понятно. Или признавать ошибки.
Все конец рабочего дня, иду домой. Будет код с I > J, поговорим. А так это глухой телефон.
Сергей М. (2007-07-30 16:09:00) [39]
> Evgeny V
Коду, не анализирующему рез-ты send/recv-вызовов - место в мусорном ведре.
Рано или поздно он даст сбой.
Сергей М. (2007-07-30 16:07:00) [40]
> Evgeny V © (30.07.07 16:04) [20]
>
>
Ты в этой ветке вообще чтохотел сказать ?
ЕЩЕ раз повторяю, для ОСОБО бестолковых - функциявозвращает результат не для Пушкина, а для тебя !