From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,99ad16995c7745f2 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!news.glorb.com!wn11feed!worldnet.att.net!bgtnsc05-news.ops.worldnet.att.net.POSTED!53ab2750!not-for-mail Newsgroups: comp.lang.ada From: anon@anon.org (anon) Subject: Re: How to implement a server socket compatible to telnet? Reply-To: no to spamers (No@email.given.org) References: X-Newsreader: IBM NewsReader/2 2.0 Message-ID: <8r_mk.151106$102.88358@bgtnsc05-news.ops.worldnet.att.net> Date: Fri, 08 Aug 2008 16:24:36 GMT NNTP-Posting-Host: 12.65.222.45 X-Complaints-To: abuse@worldnet.att.net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1218212676 12.65.222.45 (Fri, 08 Aug 2008 16:24:36 GMT) NNTP-Posting-Date: Fri, 08 Aug 2008 16:24:36 GMT Organization: AT&T Worldnet Xref: g2news1.google.com comp.lang.ada:1556 Date: 2008-08-08T16:24:36+00:00 List-Id: 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 , "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