add initial socket examples: client, server

FossilOrigin-Name: 706122b5c2fc0fabeb0f694820e56963763a5855f1dcacb65c887151c106482f
This commit is contained in:
crc 2019-06-06 17:20:03 +00:00
parent 1ad903a1e7
commit aab0b6bf18
2 changed files with 69 additions and 0 deletions

View file

@ -0,0 +1,38 @@
This uses the new `socket:` words to download a file via Gopher.
Open a file to store the data and a socket.
~~~
'Output.txt file:open<for-writing> 'File var<n>
socket:create dup n:put nl 'Sock var<n>
~~~
Connect to the server.
~~~
'forthworks.com '70 socket:configure
@Sock socket:connect drop
~~~
Next, send the request.
~~~
'/\n\n s:format @Sock socket:send drop-pair
~~~
After this, I can just read in the data, writing it to
the file.
~~~
[ here #1024 @Sock socket:recv (discard_errno: drop
here [ @File file:write ] s:for-each
dup '%n_bytes_received\n s:format s:put
(check_for_disconnect: n:zero? ] until
~~~
And finally, clean up by closing the socket and file.
~~~
@Sock socket:close
@File file:close
~~~

View file

@ -0,0 +1,31 @@
Get a socket.
~~~
socket:create 'Sock var<n>
~~~
Bind to port 9998.
~~~
'9998 @Sock socket:bind drop
~~~
Prepare to listen for connections.
~~~
#3 @Sock socket:listen drop-pair
~~~
Serve the user some data. This will repeat 5 times, then end.
~~~
#5 [ @Sock socket:accept (discard_error_code: drop )
'Hello_from_RETRO\n s:format swap [ socket:send drop-pair ] sip socket:close
] times
~~~
Clean up.
~~~
@Sock socket:close
~~~