add initial socket examples: client, server
FossilOrigin-Name: 706122b5c2fc0fabeb0f694820e56963763a5855f1dcacb65c887151c106482f
This commit is contained in:
parent
1ad903a1e7
commit
aab0b6bf18
2 changed files with 69 additions and 0 deletions
38
example/socket-client.forth
Normal file
38
example/socket-client.forth
Normal 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
|
||||
~~~
|
31
example/socket-server.forth
Normal file
31
example/socket-server.forth
Normal 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
|
||||
~~~
|
Loading…
Reference in a new issue