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

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

Запись буфера помогите?


Страницы:   1 2 3 4

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]
>
>


Ты в этой ветке вообще чтохотел сказать ?

ЕЩЕ раз повторяю, для ОСОБО бестолковых  - функциявозвращает результат не для Пушкина, а для тебя !


Страницы:   1 2 3 4

Наверх

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