-
-
Save earl/99a72e67d747a46a625b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REBOL [ | |
title: "Example simple TCP client<->server data transfer" | |
author: "Richard Smolak" | |
] | |
; Length in bytes of test data we transfer. | |
data-len: 100'000 | |
s: open tcp://:8080 | |
s/awake: func [event /local con] [ | |
print ['server-master event/type] | |
if event/type = 'accept [ | |
con: first event/port | |
con/awake: func [event /local port data len] [ | |
print ['server event/type] | |
port: event/port | |
switch event/type [ | |
read [ | |
data: port/data | |
len: length? data | |
print ["server received" len "of" data-len "bytes"] | |
either len < data-len [ | |
read port | |
] [ | |
print "server received all data" | |
data: copy data | |
clear port/data | |
write port data | |
print "server submitted data for transfer to client" | |
] | |
] | |
wrote [read port] | |
close [ | |
close port | |
return true | |
] | |
] | |
false | |
] | |
read con | |
] | |
false | |
] | |
c: open tcp://127.0.0.1:8080 | |
c/awake: func [event /local port data len] [ | |
print ['client event/type] | |
port: event/port | |
switch event/type [ | |
read [ | |
data: port/data | |
len: length? data | |
print ["client received" len "of" data-len "bytes"] | |
either len < data-len [ | |
read port | |
] [ | |
print "client received all data" | |
data: copy data | |
clear port/data | |
;finish | |
close port | |
return true | |
] | |
] | |
wrote [ | |
read port | |
] | |
close [ | |
close port | |
return true | |
] | |
lookup [open port] | |
connect [ | |
data: head insert/dup #{} 0 data-len | |
write port data | |
print "client submitted data for transfer to server" | |
] | |
] | |
false | |
] | |
open c | |
wait [s c] | |
halt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment