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

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

Как забрать ответ сервера, если у него неопределён размер??? [D7, WinME]


Страницы:   1 2

Duke DEE ©   (2003-03-17 16:54:00) 

NetLayerU.pas

function SocketBytesToRead(Socket: DWORD): DWORD;
var
Rd: u_long;
begin
if (ioctlsocket(Socket, $4004667F, Rd) = SOCKET_ERROR) then
begin
ShowMessage("error");
Result := DWORD(-1);
end
else
Result := Rd;
end;

Пытается узнать сколько весит ответ сервера, а ответ не закончен, то есть он постоянно дополняется!! И у него нет определённого размера!!! Может я тупой не умею вопросы писать, но проблема не исчезает!


Duke DEE   (2003-03-21 01:15:00) [1]

Туй с тобой, =)) Помоги с другим, У меня немецкий виндовс и англизкая Дельфи, извеняюсь что не по сетям!
1: как мне в Дельфи редакторе настроить Русские Шрифты (они у меня есть), всё перепробывал но не работает!
2: как мне в программу вставить полную поддержку русского, независимо от "Языка" виндовс?? Чтобы у меня все Лэйблы были на русском и тд, и когда я к примеру в Эдит текст русский вставляю, он бы был русским, а не вопросами!
Заранее спасибо!!!

Ещё раз извеняюсь что не в тему!


Digitman   (2003-03-20 14:46:00) [2]


> Duke DEE


Я-то ? да дворники мы) .. в жилкомхозе)

А где это ты видел , чтобы дворники за 50 каких-то там Е наперегонки бросались делать клиентские программы индивид.использования за 50Е ? 50 этих самых "Е" программа, возможно, будет стоить только в том случае, если она будет распространяться по нашенской, "дворницкой" лицензии, предусмотренной в контракте с тобой, в коем ты обязуешься продать самостоятельно остальные N - 1 экземпляров, где N = $5000 / 50"Е"))))


Duke DEE   (2003-03-20 13:45:00) [3]

за 50Е может быть и купил бы, но не 5000Е !! Ты кем работаешь??? И где??


Digitman   (2003-03-20 08:19:00) [4]

$5000 .. Устраивает ?))


Duke DEE   (2003-03-19 17:35:00) [5]

Если ты програмизмом занимаешься, то ты программистом и работаешь!! За сколько денег ты бы написал простенький клиент для ХАКЕР чата, с исходником???


Digitman   (2003-03-19 10:55:00) [6]


> Мне очень интересно всё это разбирать


А мне совершенно не интересно ! Все эти гипертектовые чаты - одно и то же и по транспорту и по механике, все различия, в осн., сводятся к тем или иным "наворотам" интерфейса взаимодействия с пользователем.


> я не хочу сидеть в форуме 2 недели, а потом узнать что это
> сделать невозможно!!


Зачем сидеть ? У тебя есть готовый работающий исх-к одного из чат-клиентов, отрассируй его в режиме встроенной отладки и поймешь, как работают все эти чаты ! Другой вопрос, что в дан.случае работа клиента по HTTP реализована, видимо, "своими силами", в то время как те же GET/POST делают то же самое автоматически


Duke DEE   (2003-03-19 10:36:00) [7]

Если не трудно зайди на http://chat.xakep.ru/login?chat=xakepи посмотри как сделан фрейм с сообщениями, причём эксплорер постоянно докачивает этот фрейм, и у фрейма нет размера и даты создания!!!
Мне очень интересно всё это разбирать, но я не хочу сидеть в форуме 2 недели, а потом узнать что это сделать невозможно!! =))

Как то надо создать две функции, 1 для всех ответов, а вторая специально для этого с сообщениями чата, и 2ой будет всегда открыт на приём сообщений!
У меня такая идея!

Послушай чем отличается GET от POST, и вообще что они делают?? В смысле я могу поставить GET, и всё будет работать, и POST, всё будет также, вроде в Ява Скрипт тоже разницу я не нашёл!

Большое спасиба!


Digitman   (2003-03-19 08:22:00) [8]

ты понимаешь разницу между вызываемой и вызывающей процедурой-функцией ?
что ты уперся в эту Socketreceive()-то ? Это - вызываемая ф-ция, ей какие факт.параметры передадут - с теми она и работает ! Смотри внимательно в код вызывающей ф-ции : какие параметры и при каких условиях она формирует для передачи в кач-ве фактических в ф-цию Socketreceive() !


gsu   (2003-03-18 18:39:00) [9]

хм ...


Duke DEE   (2003-03-18 18:11:00) [10]

ОК, буду читать, но, Microsoft Inet Explorer, каким то образом забирает этот поток!! В отличие от Оперы, которая начинает глючить!


Digitman   (2003-03-18 18:06:00) [11]

читай про протокол TCP !!!!


Duke DEE   (2003-03-18 18:02:00) [12]

Уже лучше, попробую чё нить понять, прийду позже!! Может можно Этот SocketReceive Изменить, чтобы он без Datasize обходился, и скачивал то что есть???


Digitman   (2003-03-18 17:59:00) [13]

function SocketReceive(Socket: DWORD; var Data; DataSize: DWORD): Integer;

Socket - хэндл гнезда
Data - ссылка на буфер, выделенный в контексте вызывающего кода
DataSize - размер данных, требуемый к пересылке из буфера приема гнезда в буфер Data


Duke DEE   (2003-03-18 17:54:00) [14]

SocketReceive() что делает я не особо понял (где это буфер указанного размера), а как работает???


Digitman   (2003-03-18 17:53:00) [15]


> Duke DEE


ничто не мешает тебе, имея этот код, изучить его в работе под отладчиком ! и понять. что где, как и почему делается


в помощь тебе - http://book.itep.ru, а так же - Winsok2 Programmer"s Reference Help от Борланда в составе Delphi


Digitman   (2003-03-18 17:48:00) [16]

SocketBytesToRead() актуальный размер данных, доступный в буфере приема гнезда на момент вызова

SocketReceive() собственно делает выборку из буфера приема заданного гнезда в указанный буфер указанного размера


Duke DEE   (2003-03-18 17:40:00) [17]

хм... тебе нравиться надо мной издеваться =)) Ок не файл а поток,ответ сервера, или как его завут, я же не такой просвещённый как ты!!!
Заранее благодарен!


Digitman   (2003-03-18 17:38:00) [18]

а о каком "файле" может вообще идти речь в чате ? просвети меня, тундру)


Duke DEE   (2003-03-18 17:33:00) [19]

Да работоспособный! Все файлы скачивает!, а когда появляется тот файл без размера то на
Len := SocketBytesToRead(SrvSock);

Программа замирает!!!
function SocketBytesToRead(Socket: DWORD): DWORD;
var
Rd: u_long;
begin
if (ioctlsocket(Socket, $4004667F, Rd) = SOCKET_ERROR) then
begin
Result := DWORD(-1);
end
else
Result := Rd;
end;

И что делает эта функция:
function SocketReceive(Socket: DWORD; var Data; DataSize: DWORD): Integer;
var
P: PChar;
Rv: DWORD;
begin
P := @Data;
while (DataSize > 0) do
begin
Rv := WinSock.recv(Socket, P^, DataSize, 0);
if (Rv = DWORD(SOCKET_ERROR)) then
begin
Result := WSAGetLastError;
if (Result = 0) then Result := -1;
exit;
end;
if (Rv = 0) then begin Result := -100; exit; end;
Inc(P, Rv);
Dec(DataSize, Rv);
end;
Result := 0;
end;


Что именно протокол инф.обмен, где он может быть?? (NetLayerU.pas)??


Digitman   (2003-03-18 17:16:00) [20]

ну ? и что ? достаточно работоспособный код !
но здесь нет ничего напоминающего протокол инф.обмена - только транспорт


Страницы:   1 2

Наверх

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