Pastey Socket object demo
- Posted by ghaberek (admin) May 18, 2016
Socket object demo
Example demonstrating how to send/receive Euphoria objects on-the-wire via TCP sockets.
sockobj.e
namespace sockobj include std/socket.e include std/serialize.e public function send_object( socket sock, object data, atom flags = 0 ) return sockets:send( sock, serialize(data), flags ) end function public function receive_object( socket sock, atom flags = 0 ) object data = sockets:receive( sock, flags ) atom error = 0 object result = 0 if atom( data ) then error = data else data = deserialize( data ) result = data[1] end if return {error,result} end function
server.ex
include std/socket.e include std/pretty.e include std/console.e include sockobj.e sequence pretty_options = PRETTY_DEFAULT pretty_options[ 1] = 2 -- display ASCII pretty_options[10] = 0 -- no line breaks procedure main() socket server = sockets:create( AF_INET, SOCK_STREAM, 0 ) sockets:bind( server, "0.0.0.0", 5000 ) sockets:listen( server, 10 ) while 1 do object client = sockets:accept( server ) sequence data = receive_object( client[1] ) atom error = data[1] object result = data[2] if error = 0 then -- okay printf( 1, "%d: ", client[1] ) pretty_print( 1, result, pretty_options ) puts( 1, "\n" ) send_object( client[1], result ) end if sockets:shutdown( client[1] ) sockets:close( client[1] ) end while sockets:shutdown( server ) sockets:close( server ) end procedure main()
client.ex
include std/socket.e include std/pretty.e include std/console.e include sockobj.e sequence pretty_options = PRETTY_DEFAULT pretty_options[ 1] = 2 -- display ASCII pretty_options[10] = 0 -- no line breaks procedure main() socket s = sockets:create( AF_INET, SOCK_STREAM, 0 ) sockets:connect( s, "127.0.0.1", 5000 ) send_object( s, {"Hello", "world!", 12345, 0.9876} ) sequence data = receive_object( s ) atom error = data[1] object result = data[2] if error = 0 then -- okay pretty_print( 1, result, pretty_options ) puts( 1, "\n" ) end if sockets:shutdown( s ) sockets:close( s ) maybe_any_key() end procedure main()