comp.lang.ada
 help / color / mirror / Atom feed
From: anon@anon.org (anon)
Subject: Re: GNAT.Sockets. Blocking?
Date: Wed, 24 Jun 2009 14:03:28 GMT
Date: 2009-06-24T14:03:28+00:00	[thread overview]
Message-ID: <Qmq0m.391917$4m1.193188@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: 158756da-21b7-4e2d-b288-7ba030f1f35c@25g2000yqb.googlegroups.com

Also, each Web Page must be open downloaded and then close. and reopen, 
upload requested information wait download result then close. That is, if you 
want to read 10 pages you must open read and close the page 10 times. Its 
just the protocol that is used to access the internet based on a number of RFC. 

To really learn how to access this you should install a server like Apache and 
GNAT's AWS and build a simple set set of web pages.  Write and test your 
program on that server instead of causing problems with an active online 
server.

In <158756da-21b7-4e2d-b288-7ba030f1f35c@25g2000yqb.googlegroups.com>, "Jacob M. H. Smith" <jacob.m.h.smith@googlemail.com> writes:
>Hi,
>
>I'm kind of new to socket programming and I need some help here. I
>wrote a simple little program that just fetches Google's index page.
>The posted code works, but only because I used a "Connection: close"
>header in the HTTP request. How would set up my code responsible for
>reading the data from the stream so that I can read the page while
>keeping the connection open? If I remove the header the program seems
>to stop when calling the Ada.Streams.Read function if there is less
>than BUFFER_SIZE data in the streams buffer. Can't I just read as much
>as is available?
>
>Thanks in advance.
>
>Here's the code:
>
>-------------------
>
>with Ada.Text_IO;
>with Ada.Streams;
>with GNAT.Sockets;
>
>procedure Socket_Test is
>
>  procedure Connect (
>      Socket  : out GNAT.Sockets.Socket_Type;
>      Channel : out GNAT.Sockets.Stream_Access;
>      Host    : in  String;
>      Port    : in  GNAT.Sockets.Port_Type) is
>    HOST_ENTRY : constant GNAT.Sockets.Host_Entry_Type :=
>        GNAT.Sockets.Get_Host_By_Name (Host);
>    Address : GNAT.Sockets.Sock_Addr_Type;
>  begin
>    --  Prepare the address structure. TODO: make a loop
>    Address.Addr := GNAT.Sockets.Addresses (HOST_ENTRY, 1);
>    Address.Port := Port;
>    --  Set up the connection.
>    GNAT.Sockets.Create_Socket (Socket);
>    GNAT.Sockets.Connect_Socket (Socket, Address);
>    Channel := GNAT.Sockets.Stream (Socket);
>    --  TODO: error handling.
>  end Connect;
>
>  use type Ada.Streams.Stream_Element_Count;
>
>  BUFFER_SIZE : constant Ada.Streams.Stream_Element_Count := 256;
>  HTTP_PORT   : constant GNAT.Sockets.Port_Type := 80;
>  CRLF        : constant String := (ASCII.CR, ASCII.LF);
>  HOST        : constant String := "www.google.com";
>
>  Socket     : GNAT.Sockets.Socket_Type;
>  Channel    : GNAT.Sockets.Stream_Access;
>  Byte_Count : Ada.Streams.Stream_Element_Count;
>  Buffer     : Ada.Streams.Stream_Element_Array (1 .. BUFFER_SIZE);
>
>begin
>
>  --  Initialize.
>  GNAT.Sockets.Initialize;
>
>  --  Connect.
>  Connect (Socket, Channel, "www.google.com", HTTP_PORT);
>
>  --  Send HTTP request.
>  String'Write (Channel,
>      "GET / HTTP/1.1" & CRLF &
>      "Host: " & HOST & CRLF &
>      "Connection: close" & CRLF &
>      CRLF);
>
>  --  Read incoming data.
>  loop
>    Ada.Streams.Read (Channel.all, Buffer, Byte_Count);
>    exit when Byte_Count = 0;
>    for I in 1 .. Byte_Count loop
>      Ada.Text_IO.Put (Character'Val (Buffer (I)));
>    end loop;
>  end loop;
>
>end Socket_Test;




  parent reply	other threads:[~2009-06-24 14:03 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-23 21:06 GNAT.Sockets. Blocking? Jacob M. H. Smith
2009-06-24  0:14 ` John B. Matthews
2009-06-24  4:55   ` Jacob M. H. Smith
2009-06-24 14:36     ` John B. Matthews
2009-06-24  7:47 ` Dmitry A. Kazakov
2009-06-24 13:32 ` anon
2009-06-24 14:03 ` anon [this message]
2009-06-24 15:14 ` Pascal Obry
2009-06-24 18:44 ` Simple solution was " anon
2009-06-24 18:47 ` Per Sandberg
2009-06-24 19:51   ` Pascal Obry
2009-06-24 22:12   ` Jeffrey R. Carter
2009-06-25 17:30     ` Jacob M. H. Smith
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox