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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нестабильное соединение сокетов 
:(
    Опции темы
Vlad308011
Дата 22.2.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть некий сайт в интернете
Есть програма делающая хттп запросы к нему
У нескольких человек програма получает страницу от сервера через раз, нестабильно
Написал кусок кода в цикле создающий соединение с сервером

Код

    vSocket := Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    FillChar(vSockAddr,SizeOf(TSockAddr),0);
    vSockAddr.sin_family := AF_INET;
    vSockAddr.sin_port := htons(FPort);
 
    p := GetHostByName(PChar(FHost));
    if p=nil then
    begin
      Memo1.Lines.Add('Error resolving IP of '+FHost);
      continue;
    end;
    IPAddr:=inet_ntoa(PInAddr(p.h_addr_list^)^);
 
    vSockAddr.sin_addr.S_addr := inet_addr(pchar(IPAddr));
    connect(vSocket,vSockAddr,SizeOf(TSockAddr));
 
    SocketEvent:=WSACreateEvent;
    try
      WSAEventSelect(vSocket,SocketEvent,FD_CLOSE or FD_CONNECT);
      repeat
        if WaitForSingleObject(SocketEvent,30000)=258 then
        begin
          Memo1.Lines.Add('Connection timeouted...');
          break;
        end;
        WSAResetEvent(SocketEvent);
        WSAEnumNetworkEvents(vSocket,SocketEvent,@NI);
        if (NI.lNetworkEvents and FD_CONNECT)<>0 then
        begin
          if NI.iErrorCode[FD_CONNECT_BIT]<>0 Then
          begin
            Memo1.Lines.Add('Error '+IntToStr(NI.iErrorCode[FD_CONNECT_BIT])+' while connecting to '+FHost+' ['+IPAddr+':'+IntToStr(FPort)+']...');
            Break;
          end else
          begin
            Memo1.Lines.Add('Connected to '+FHost+' ['+IPAddr+':'+IntToStr(FPort)+']...');
            SCount:=SCount+1;
            Break;
          end;
        end;
        if (NI.lNetworkEvents and FD_CLOSE)<>0 then
        begin
          closesocket(vSocket);
          vSocket:=INVALID_SOCKET;
          Memo1.Lines.Add('Connection closed by remote server...');
          Break;
        end;
      Until 1=0;
    finally
      WSACloseEvent(SocketEvent);
      closesocket(vSocket);
      vSocket:=INVALID_SOCKET;
    end;


лог работы выглядит примерно так
Connected to ххххххх...
Error 10060 while connecting to ххххххх...
Error 10060 while connecting to ххххххх...
Error 10060 while connecting to ххххххх...
Connected to ххххххх...
Error 10060 while connecting to ххххххх...
Connected to ххххххх...
Error 10060 while connecting to ххххххх...
Connected to ххххххх...
Connected to ххххххх...
Error 10060 while connecting to ххххххх...
Connected to ххххххх...
Error 10060 while connecting to ххххххх...
Connected to ххххххх...
Connected to ххххххх...

при этом в любом браузере на этой же машине эта страничка открывается стабильно
в чем может быть проблемма?
PM MAIL   Вверх
Gnus
Дата 29.2.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

...
   WSAResetEvent(SocketEvent);
   WSAEnumNetworkEvents(vSocket,SocketEvent,@NI);
...


Зачем тут делать сброс события? 
WSAEnumNetworkEvents должна заполнить структуру WSANETWORKEVENTS и сбросить SocketEvent.
А так получается, что ты сбрасываешь событие до заполнения WSANETWORKEVENTS и что у тебя в NI хранится неизвестно.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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