Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 20:03   #1
shinobi2
 
Регистрация: 14.01.2009
Сообщений: 4
По умолчанию WinSock и бесконечный цикл

Помогите, не могу никак решить одну проблему.
Есть функция отправки GET запроса на хост через сокеты, мне нужно сделать её в бесконечном цикле, чтобы она постоянно слала на хост этот запрос.
Но проблема в том, что при реализации этого через библиотеку WinSock запросы успешно выполняются, но и + ко всему на компьютере открывается кучу соединений, в результате чего компьютер попросту намертво виснет.
Вот моя функция:
Код:
function fWSRecv():string;
var
hSocket: TSocket;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
samzapros,kuda:string;
begin
 kuda:='localhost';
 samzapros:='GET /log/ass.php' + #13#10 +
'Host: localhost' + #13#10 +
'User-Agent: Mozilla/5.0' + #13#10 +
'Accept: text/html' + #13#10 +
'Accept-Language: ru' + #13#10 +
'Accept-Charset: windows-1251' + #13#10 +
'Connection: close' + #13#10#13#10;
   while true do begin
 hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 hHost := gethostbyname(PChar(kuda));
 hAddr.sin_family := PF_INET;
 hAddr.sin_port := htons(80);
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
 hTimeout.tv_sec := mstimeout;

 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 connect(hSocket, hAddr, SizeOf(hAddr));
 Send(hSocket, samzapros[1], length(samzapros), 0);
 CloseSocket(hSocket);
 end;
end;
Вызываю так:
WSAStartup($101, ws);
fWSRecv;

Тут ну всё испробовал, и ставил AF_INET вместо PF_INET, и т.д… но никак понять не могу, почему он открывает кучу соединений, в результате чего все виснет.
Кто знает в чем ошибка, пожалуйста подскажите.
shinobi2 вне форума Ответить с цитированием
Старый 09.02.2010, 18:01   #2
Crusher
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 27
По умолчанию

У тебя цикле сокеты несколько раз создаются, подключаются и отправляют сообщения. Нужно вне цикла создать сокет, а в цикле посылать сообщения.
Код:
function fWSRecv():string;
var
hSocket: TSocket;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
samzapros,kuda:string;
begin
 kuda:='localhost';
 samzapros:='GET /log/ass.php' + #13#10 +
'Host: localhost' + #13#10 +
'User-Agent: Mozilla/5.0' + #13#10 +
'Accept: text/html' + #13#10 +
'Accept-Language: ru' + #13#10 +
'Accept-Charset: windows-1251' + #13#10 +
'Connection: close' + #13#10#13#10;
 hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 hHost := gethostbyname(PChar(kuda));
 hAddr.sin_family := PF_INET;
 hAddr.sin_port := htons(80);
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
 hTimeout.tv_sec := mstimeout;

 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 connect(hSocket, hAddr, SizeOf(hAddr));
 while true do 
    Send(hSocket, samzapros[1], length(samzapros), 0);
 CloseSocket(hSocket);
end;
Crusher вне форума Ответить с цитированием
Старый 10.02.2010, 17:36   #3
shinobi2
 
Регистрация: 14.01.2009
Сообщений: 4
По умолчанию

... и в итоге в твоем примере он отправит всего 1 запрос и все.
Я это уже все пробовал ;(
shinobi2 вне форума Ответить с цитированием
Старый 10.02.2010, 18:10   #4
Crusher
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 27
По умолчанию

Цитата:
Сообщение от shinobi2 Посмотреть сообщение
... и в итоге в твоем примере он отправит всего 1 запрос и все.
Я это уже все пробовал ;(
почему же? Send в цикле будет посылать сообщения и не один раз.

Последний раз редактировалось Crusher; 10.02.2010 в 18:28.
Crusher вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Switch вложенный в бесконечный цикл coper Общие вопросы C/C++ 2 16.11.2009 02:31
Таймаут и бесконечный цикл Terikon Работа с сетью в Delphi 4 30.03.2009 14:48
цикл...и по ходу бесконечный... victum Помощь студентам 10 07.01.2009 15:57
Бесконечный цикл(visual c++) JOFRIF Visual C++ 10 26.08.2008 22:43
Бесконечный цикл Эдуард Общие вопросы C/C++ 4 03.04.2008 17:28