comp.lang.ada
 help / color / mirror / Atom feed
From: anon@anon.org (anon)
Subject: Re: How to implement a server socket compatible to telnet?
Date: Fri, 08 Aug 2008 16:24:36 GMT
Date: 2008-08-08T16:24:36+00:00	[thread overview]
Message-ID: <8r_mk.151106$102.88358@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: ca7b2304-6726-479b-89a0-67486c3dc06f@f63g2000hsf.googlegroups.com

If your doing a direct conversion from C to Ada using sockets then you might 
need to use the lower-level socket package, "GNAT.Sockets.Thin".  This 
package has direct library links to the sockets library routines, bypassing the 
extra layer of code in "GNAT.Sockets".

Also, in "GNAT.Sockets.Thin", the "Bind" function is called "C_Bind" and is 
still a function unlike "sockets where the sockets routines are mostly 
procedures and are based on "Ada.Streams", in "GNAT.Sockets".

In <ca7b2304-6726-479b-89a0-67486c3dc06f@f63g2000hsf.googlegroups.com>, "snoopysalive@googlemail.com" <snoopysalive@googlemail.com> writes:
>Hello!
>
>For some reasons I had to implement a server socket in C++. Now I want
>to do the same in Ada and so I read the GNAT.Sockets-library and
>implemented a shorter version of the example given in the g-
>socket.ads.
>
>The problem is that I want to implement the server in a kind, that
>processes written in other languages like the tool telnet or a Java-
>programme are able to communicate with it. But my server isn't able to
>print a message sent by the telnet-client, so I think that I've
>written something wrong in my code.
>
>Here's the code:
>
>with Ada.Text_IO,
>     Ada.Exceptions,
>     GNAT.Sockets;
>use Ada.Text_IO,
>    Ada.Exceptions,
>    GNAT.Sockets;
>
>procedure Server is
>    Host    : String    := "localhost";
>    Port    : Port_Type := 7777;
>    Address : Sock_Addr_Type;
>    Server  : Socket_Type;
>    Client  : Socket_Type;
>    Channel : Stream_Access;
>begin -- Server
>    Initialize;
>    Address.Addr := Addresses (Get_Host_By_Name (Host), 1);
>    Address.Port := Port;
>
>    begin
>        Create_Socket (Server);
>        Put_Line ("Server socket created");
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Create_Socket failed");
>    end;
>    -- Create server socket
>
>    begin
>        Set_Socket_Option (Server, Socket_Level, (Reuse_Address,
>True));
>        Put_Line ("Socket address reused");
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Set_Socket_Option failed");
>    end;
>    -- Resuse socket address
>
>    begin
>        Bind_Socket (Server, Address);
>        Put_Line ("Server socket bound");
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Bind_Socket failed");
>    end;
>    -- Bind server
>
>    begin
>        Listen_Socket (Server);
>        Put ("Server is listening... ");
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Listen_Socket failed");
>    end;
>    -- Listening...
>
>    begin
>        Accept_Socket (Server, Client, Address);
>        Put_Line ("Got client connection");
>        delay 0.2;
>        Channel := Stream (Client);
>        Put_Line ("Client streamed");
>
>        declare
>            Message : String := String'input (Channel);
>        begin
>            Put_Line (Message);
>        end;
>        -- Get client message and print it to the screen
>
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Accept_Socket failed");
>    end;
>    -- Client handling
>
>    begin
>        Close_Socket (Client);
>        Put_Line ("Client closed");
>        Close_Socket (Server);
>        Put_Line ("Server closed");
>    exception
>        when E : Socket_Error =>
>            Put_Line (Standard_Error, "Close_Socket failed");
>    end;
>    -- Close client and server sockets
>
>    Finalize;
>end Server;
>
>
>The server's output is:
>
>"Server socket created
>Socket address reused
>Server socket bound
>Server is listening... Got client connection
>Client streamed
>
>Client closed
>Server closed"
>
>
>The empty line should be the message sent by telnet, but like you can
>see, the message is empty.
>
>So, can anybody explain to me, what I have done wrong?
>
>Thank you,
>Matthias




  parent reply	other threads:[~2008-08-08 16:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-08 11:31 How to implement a server socket compatible to telnet? snoopysalive
2008-08-08 13:15 ` Jeffrey Creem
2008-08-08 13:35 ` Alex R. Mosteo
2008-08-08 16:24 ` anon [this message]
2008-08-09 13:19   ` snoopysalive
2008-08-10 22:15   ` Robert A Duff
2008-08-10 23:34     ` anon
2008-08-11  1:31       ` Robert A Duff
2008-08-11 18:26         ` anon
2008-08-11 18:59           ` Samuel Tardieu
2008-08-20 21:25             ` snoopysalive
2008-08-20 22:57               ` anon
replies disabled

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