46 lines
1.2 KiB
Scheme
46 lines
1.2 KiB
Scheme
(module echo mzscheme
|
|
(define PORT 8888)
|
|
(define DATA "Hello there sailor\n")
|
|
(define n 10)
|
|
|
|
(define (server)
|
|
(thread client)
|
|
(let-values ([(in out) (tcp-accept (tcp-listen PORT 5 #t))]
|
|
[(buffer) (make-string (string-length DATA))])
|
|
(file-stream-buffer-mode out 'none)
|
|
(let loop ([i (read-string! buffer in)]
|
|
[bytes 0])
|
|
(if (not (eof-object? i))
|
|
(begin
|
|
(display buffer out)
|
|
(loop (read-string! buffer in)
|
|
(+ bytes (string-length buffer))))
|
|
(begin
|
|
(display "server processed ")
|
|
(display bytes)
|
|
(display " bytes\n"))))))
|
|
|
|
(define (client)
|
|
(let-values ([(in out) (tcp-connect "127.0.0.1" PORT)]
|
|
[(buffer) (make-string (string-length DATA))])
|
|
(file-stream-buffer-mode out 'none)
|
|
(let loop ([n n])
|
|
(if (> n 0)
|
|
(begin
|
|
(display DATA out)
|
|
(let ([i (read-string! buffer in)])
|
|
(begin
|
|
(if (equal? DATA buffer)
|
|
(loop (- n 1))
|
|
'error))))
|
|
(close-output-port out)))))
|
|
|
|
(define (main args)
|
|
(set! n
|
|
(if (= (vector-length args) 0)
|
|
1
|
|
(string->number (vector-ref args 0))))
|
|
(server))
|
|
|
|
(main (current-command-line-arguments)))
|