31 lines
1.2 KiB
Racket
31 lines
1.2 KiB
Racket
|
#lang racket
|
||
|
|
||
|
(define listener (tcp-listen 8083 5 #t)) ;; listener to service connection requests
|
||
|
;; client attempts to connect. Receives an input and output port
|
||
|
(define-values (client-in client-out) (tcp-connect "localhost" 8083))
|
||
|
;; server accepts the connection request. Also gets a pair of ports
|
||
|
(define-values (server-in server-out) (tcp-accept listener))
|
||
|
|
||
|
;; client sends identifying message
|
||
|
(display (string-append "Client:My name is " "Ibrahim" "\n")
|
||
|
client-out)
|
||
|
(flush-output client-out) ;; must flush as ports are buffered in racket
|
||
|
|
||
|
;; server receives and reads it
|
||
|
;; cooler if on separate racket instances
|
||
|
(read-line server-in) ;; --> "Client:My name is #hostname.
|
||
|
;; server replies
|
||
|
(display (string-append "Server:Hi " "Ibrahim" "\n") server-out)
|
||
|
(flush-output server-out) ;; flush flush
|
||
|
|
||
|
;; client displays server message
|
||
|
(read-line client-in)
|
||
|
(close-output-port server-out)
|
||
|
(close-output-port client-out)
|
||
|
(read-line client-in) ;; --> eof object #eof
|
||
|
(read-line server-in) ;; --> eof object #eof
|
||
|
(tcp-close listener)
|
||
|
; (custodian-shutdown-all (current-custodian)) ;; release all resources including
|
||
|
;; tcp, file, custom ports
|
||
|
;; application exits
|