Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TclientSocket 
:(
    Опции темы
wsr
  Дата 19.1.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Привет всем.
У меня возник небольшой вопрос по TCkientSocket(вкладка Internet) в Delphi 7.
В общем, я отправляю запрос, получаю ответ.
И вот как мне сразу после получения ответа закрыть сокетное соединение?
Подскажите плизз.

З.Ы. Есть ли какой нить мануал по TClientSocket. Просто о использовании?

Код

procedure TForm1.Button1Click(Sender: TObject); //Нажимаем на кнопку отправить
begin
  ClientSocket1.Address := 'forum.vingrad.ru';
  ClientSocket1.Port := 80;
  ClientSocket1.Active := TRUE;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); //При коннекте посылаем запрос
begin
  ClientSocket1.Socket.SendText ( 'HEAD / HTTP/1.1' +#13#10+#13#10);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); //После отправки запроса начинаем принимать данные
begin
  Memo1.Text := Memo1.Text + ClientSocket1.Socket.ReceiveText;
end;

{
После того как приняли все данные через сикунд 5-10 происходит разрыв соединения (disconnect)
А как мне сделать, что бы сразу после получения ответа от сервера разрыв соединения происходил мгновенно, а не спустя 5-10 секунд???
}

--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
Демо
Дата 19.1.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Код

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin    
  Memo1.Text := Memo1.Text + Socket.ReceiveText;    
  Socket.Close;
end;



--------------------
    
PM MAIL ICQ Skype   Вверх
wsr
Дата 19.1.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Я это уже пробовал. Знаешь почему это не работает.
Потому, что нам приходит несколько пакетов с ответом, а ты после получения первого пакета отрубаешь соединение.
Именно поэтому я и использую Memo1.Text := Memo1.Text + Socket.ReceiveText;
--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
FRAGNATIC
Дата 19.1.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



wsr
отрубай соединение после последнего пакета)
или поставив счётчик на их кол-во если знаешь)
или поставивв таймер типа если за 10секунд не фига не пришло) или по самому пакету=)
если это твоё приложение шлёт пакеты то тогда можешь слать пакет типа 'end' а потом проверяешь if Socket.ReceiveText='end' then....
PM MAIL   Вверх
N1k
Дата 19.1.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.1.2006

Репутация: 2
Всего: 2



wsr
Чем тебя не устрамвает автоматический разрыв соединения?
Ищи в заголовке Content-Length и сравнивай с количеством прочитанных данных.
После того, как Content-Length станет равным длинне прочитанных данных, рви соединение.
зы:Content-Length не учитывает заголовок...
PM MAIL   Вверх
RA
Дата 19.1.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



По существу:
А использовать какойнить httpclient религия не позволяет?

Если не позволяет тогда есть один извращенческий способ:
если в ClientSocket1Read
присол текст содержащий в последней строке = "</html>"
значит ты получил всю html страницу .... do Disconnect smile



Не по сущесву: (Анти реклама smile )
ИМХО. вобще использование TCkientSocket как для веба так и для не веба крайне нерекомендуемо. Эти компоненты скорее демонстрационное пособие но не более.
PM   Вверх
N1k
Дата 19.1.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.1.2006

Репутация: 2
Всего: 2



Цитата(RAdmin @ 19.1.2006, 16:39 Найти цитируемый пост)

ИМХО. вобще использование TCkientSocket как для веба так и для не веба крайне нерекомендуемо. Эти компоненты скорее демонстрационное пособие но не более.

Кем "нерекомендуемо"?
Там есть ошибки в алгоритме работы гнезда?
А то, что для веба нужно использовать компоненты работающие на http протоколе, это точно.
Хотя в конечном итоге все замыкается на WinSock.
PM MAIL   Вверх
wsr
Дата 19.1.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Цитата(FRAGNATIC @ 19.1.2006, 14:02 Найти цитируемый пост)

отрубай соединение после последнего пакета)

Как бы еще узнать, что именно этот пакет последний smile((

Цитата(N1k @ 19.1.2006, 14:17 Найти цитируемый пост)

Чем тебя не устрамвает автоматический разрыв соединения?

После получения данных проходит примерно от 5 до 10 секунд до разрыва соединения.

Цитата(RAdmin @ 19.1.2006, 16:39 Найти цитируемый пост)

А использовать какойнить httpclient религия не позволяет?

Дай какой нить пример, да желательно и с "мануалом" по компоненту.

Цитата(N1k @ 19.1.2006, 19:35 Найти цитируемый пост)

А то, что для веба нужно использовать компоненты работающие на http протоколе, это точно.

Можешь назвать такие компоненты?

Был в Delphi 4-5 компонент, назывался NMHTTP. Так классно было. Можно было в легкую послать запрос, получить отдельно Header и Body из ответа, и закрыть соединение.
А в Delphi 7 я что то подобного компонента ненашел!
--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
Snowy
Дата 19.1.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(wsr @ 19.1.2006, 22:11 Найти цитируемый пост)
А в Delphi 7 я что то подобного компонента ненашел!

Интересно ищешь.
Слово Indy в поиске завалит тебя примерами.
TIdHTTP штука очень мощная.
PM MAIL   Вверх
wsr
Дата 19.1.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Snowy, спасибо посмотрю.
--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
RA
Дата 19.1.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



компоненты ICS www.owerbyte.be (Имхо удобней и проще чем индейцы, мануалы ненужны есть примеры)

Цитата(N1k @ 19.1.2006, 19:35 Найти цитируемый пост)

Кем "нерекомендуемо"?
Там есть ошибки в алгоритме работы гнезда?



Не рекомендуемо мной, хотя уверен если провести опрос то многие подпишутся.

Насчёт ошибок клиента, не помню (возможно мелкие есть) , но судя по тому когда эти компоненты последний раз обновлялись не исключено, а вот в СерверСокете как минимум одна гадкая ошибка была найденна. Ну а поскольку сервер и клиент представляются в одной связке, то моё недоверие автоматически распространилось и на него.
PM   Вверх
Snowy
Дата 20.1.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(RAdmin @ 19.1.2006, 22:56 Найти цитируемый пост)
Не рекомендуемо мной, хотя уверен если провести опрос то многие подпишутся.

Подписываюсь smile
Использовать готовые библиотеки работы с сетевыми протоколами лучше по простой причине:
1. Это проще.
2. Там уже обойдены все грабли, на которые сам обязательно наступишь.
Есть и минусы, но они важны только для маньяков или разработчиков собственных библиотек.
PM MAIL   Вверх
N1k
Дата 20.1.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.1.2006

Репутация: 2
Всего: 2



Самый простой "компонент" это WinInet.
Научишься пользовать его для HTTP и проблем у тебя не будет...
В том плане, что все предложенные комноненты не работают с HTTPs без дополнительных библиотек, А WinInet eсть на каждой машине с Windows.
ps:Как пример посмотри компонент EasyNet. Он написан с использованием WinInet и есть возможность использовать кукисы локально...

Это сообщение отредактировал(а) N1k - 20.1.2006, 11:40
PM MAIL   Вверх
Snowy
Дата 20.1.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(N1k @ 20.1.2006, 11:37 Найти цитируемый пост)
Самый простой "компонент" это WinInet.

1. Это не компонент.
2. Работает только в обычных условиях. Шаг влево, шаг вправо - все.
У меня, например он не работает, т.к. я не пускаю IE в сеть.
А еще полно ньюансов с проксями...
PM MAIL   Вверх
Демо
Дата 21.1.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Цитата(RAdmin @ 19.1.2006, 23:56 Найти цитируемый пост)

Не рекомендуемо мной, хотя уверен если провести опрос то многие подпишутся.


Вряд ли. Просто нужны прямые руки (это не про тебя, а вообще).


--------------------
    
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.2042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.