Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
ВнизRECV и TMemoryStream Найти похожие ветки
← →
VadimX (2005-09-12 22:33) [0]Как читать из TSocket;
не в буфер Array of char;
А сразу в TMemoryStream?
Сейчас реализовано вот так
aBuf : array of char;
BufSize,
vSize : integer;
s : TSocket;
vSize := RECV(s,aBuf[0],BufSize,0);
← →
MBo © (2005-09-13 06:11) [1]читать в MemStream.Memory^, не забыв сперва установить размер
← →
VadimX (2005-09-13 17:35) [2]т.е. вот так?
MS.SetSize(BufSize);
vSize := RECV(s,MS.Memory^,BufSize,0);
у меня получается MS.Memory пустой
хотя с aBUf[0] было все нормально.
И вообще как посмотреть содержимое потока при отладке?
← →
Digitman © (2005-09-13 17:46) [3]
> у меня получается MS.Memory пустой
что значит "пустой" ? и на основании чего такое умозаключение ?
> как посмотреть содержимое потока при отладке?
например, так:
в Evaluate/Modify запросить значение выражения PByteArray(MS.Memory)
← →
VadimX (2005-09-13 18:18) [4]>> у меня получается MS.Memory пустой
>что значит "пустой" ? и на основании чего такое умозаключение ?
Пустой= без данных!
MS.WRITE(aBuf,vSize);
aBuf виден в отладчике. (0#,0#,0#,0#,0#,0#,0#,0#,0#,...)
как был так и остался.
Следовательно RECV(s,MS.Memory^,BufSize,0); ничего не записал в MS, либо я неправильно копирую в aBuf.
>> как посмотреть содержимое потока при отладке?
>например, так:
>в Evaluate/Modify запросить значение выражения PByteArray(MS.Memory)
Пишет адрес, данных не видно =((
← →
Digitman © (2005-09-13 18:24) [5]
> VadimX (13.09.05 18:18) [4]
> MS.WRITE(aBuf,vSize);
а это здесь причем ?!
ты хоть почитал в справке, что делает метод TStream.Write(), перед тем как пользовать его ?
> Пишет адрес, данных не видно
PByteArray(MS.Memory)^
← →
VadimX (2005-09-13 18:38) [6]>> MS.WRITE(aBuf,vSize);
>а это здесь причем ?!
>ты хоть почитал в справке, что делает метод TStream.Write(), >перед тем как пользовать его ?
Пишет в abuf vSize байт.
>> Пишет адрес, данных не видно
>PByteArray(MS.Memory)^
Так бы и говорил сразу. Теперь нормально видно.
← →
Digitman © (2005-09-13 18:42) [7]
> Пишет в abuf vSize байт
ну а причем здесь abuf-то ? и причем здесь "писать в буфер" ?
ты же вопрос как поставил ? мол, хочу считывать данные из гнезда в MemStream, а не в abuf ..
> Так бы и говорил сразу
а дотумкать самому сложно, что я упустил разыменование ?)
или в первый раз про разыменование слышишь ?
← →
VadimX (2005-09-13 18:57) [8]>> Пишет в abuf vSize байт
>ну а причем здесь abuf-то ? и причем здесь "писать в буфер" ?
ты же вопрос как поставил ? мол, хочу считывать данные из гнезда в MemStream, а не в abuf ..
Это в ответ на твой вопрос
""Что значит "пустой" ? и на основании чего такое >умозаключение ?""
Мне же надо проверить, что записалось в MS.
Решил проверить перезаписью в буфер. В чем криминал-то?
>> Так бы и говорил сразу
>а дотумкать самому сложно, что я упустил разыменование ?)
Ты сам про него забыл.
>или в первый раз про разыменование слышишь ?
=))
← →
Digitman © (2005-09-14 12:41) [9]var
MS: TMemoryStream;
aBuf: array [0..4095] of byte;
BytesActuallyRead: integer;
s: TSocket;
..
MS := TMemoryStream.Create;
...
BytesActuallyRead := RECV(s,aBuf, SizeOf(aBuf), 0);
if BytesActuallyRead > 0 then
MS.Write(aBuf, BytesActuallyRead);
← →
Digitman © (2005-09-14 13:35) [10]мне вообще непонятно, что за блажь - ЗАВЕДОМО использовать VCL (см. TStream) и при этом обращаться к WinsokAPI напрямую ..
прокомментируй это ..
ЧЕМ не угодили хотя бы стандартные компоненты в штатной поставке Делфи ?
ЧЕМ оправдана блажь с обращением к WinsokAPI напрямую ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c