Показать сообщение отдельно

  #5  
Старый 31.10.2009, 21:11
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
С нами: 8960826

Репутация: 2261


По умолчанию

предыдущую копию этого вопроса (2 дня назад) удалил, по прежнему актуально.
не верю что совершенно никто не знает
за решение с меня +10.


вопрос:
как реализовать периодический отстук приложения внутри одного сокета?

Вариант, который отстукивает каждые 60 секунд создавая новый сокет:
Код:
WSAStartup(MAKEWORD(2,0), wsaData);

while not terminated do
  begin        
        sleep(60000);
        s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        FillChar(addr, SizeOf(sockaddr_in), 0);
        addr.sin_family:=AF_Inet;
        addr.sin_addr.S_addr:=inet_addr('111.22.33.44');
        addr.sin_port:=htons(80);
        Connect(S,addr,SizeOf(TSockAddr));
        sendbuff := 
           'GET / HTTP/1.1'+ #13#10 +
           'Host: 111.22.33.44'+ #13#10#13#10;
        send(s, sendbuff[1] , Length(sendbuff), 0);
        closesocket(s);
  end;

WSACleanup;
Если вписать строку с send 2 раза(метод научного тыка), то на второй отстук внутри того же сокета ответа от хоста не будет. Добавлять
Keep-Alive: 300
Connection: Keep-Alive
тоже бесполено. Видимо изначально нужно как-то до-другому открывать сокет.


Заранее благодарю
 
Ответить с цитированием