Skip to content

Instantly share code, notes, and snippets.

@earl
Forked from cyphre/ports-demo.r3
Created July 11, 2014 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save earl/99a72e67d747a46a625b to your computer and use it in GitHub Desktop.
Save earl/99a72e67d747a46a625b to your computer and use it in GitHub Desktop.
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