aboutsummaryrefslogtreecommitdiff
path: root/feasibility_analysis/tcptalk.rkt
blob: d069851c937825f608966422917854f6043570cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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