Показать сообщение отдельно
Старый 28.11.2012, 22:00   #2
Paranoia
AnyKey`щик
 
Регистрация: 27.07.2012
Сообщений: 5
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Данные из интернет странички

Вот процедура с примером:
EnableExplicit

#server_ip = "ya.ru"
#server_host = "www.ya.ru"
#server_port = 80
#server_protocol = "HTTP/1.0"
#delay_part = 25

InitNetwork()

Procedure get_server_data(time_for_update.i, buffer_size.i)
  Protected connection_id.i = OpenNetworkConnection(#server_ip, #server_port, #PB_Network_TCP)
  If connection_id <> 0
    Protected string_to_send.s = "GET / " + #server_protocol + #CRLF$
    string_to_send + "Host: " + #server_host + #CRLF$
    string_to_send + "Connection: Close" + #CRLF$ + #CRLF$
    
    SendNetworkString(connection_id , string_to_send)
    
    Protected time_current.i = ElapsedMilliseconds()
    Protected time_limit.i = time_current + time_for_update
    
    Protected final_of_transmission.i = 0
    
    Define content.s
    
    Repeat     
      Select NetworkClientEvent(connection_id)
        Case #PB_NetworkEvent_Data
          Repeat
            Protected *memory_buffer = AllocateMemory(buffer_size)
            Protected received_size.i = ReceiveNetworkData(connection_id, *memory_buffer, buffer_size)
            Debug received_size
            If received_size = -1 Or received_size = 0
              FreeMemory(*memory_buffer)
              final_of_transmission.i = 1
              Break
            Else
              Protected received_size_global.i
              received_size_global + received_size
              Protected *memory_global = ReAllocateMemory(*memory_global, received_size_global)
              CopyMemory(*memory_buffer, *memory_global + (received_size_global - received_size), received_size)
              FreeMemory(*memory_buffer)
            EndIf
          ForEver
      EndSelect
      
      If final_of_transmission > 0
        CloseNetworkConnection(connection_id)
        content = PeekS(*memory_global, received_size_global)
        FreeMemory(*memory_global)
        Debug "Done!"
        Debug content
        Break
      Else
        ;timeout check call
        time_current = ElapsedMilliseconds()
        If time_current > time_limit
          ;status is timeout (server not responge)
          CloseNetworkConnection(connection_id)
          Debug "TimeOut!"
          Break
        Else
          Delay(#delay_part)
        EndIf
      EndIf
    ForEver
  Else
    Debug "Can not connect!"
  EndIf 
EndProcedure

get_server_data(10000, 4096)
Будет принята страница с сайта ya.ru, тайм-аут приема данных — 10 сек., размер TCP-буффера — 4096 байт (вообще, это параметры).
В строке content на 53 строке будет содержимое страницы.

Меняете адреса, добавляете обработку ошибок (как минимум 69 и 61 строки) и готово.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Izunad (28.11.2012)