我在服務器和客戶機之間有一個tcp連接,我正在尋找一種方法來輪詢服務器端的輸入端口。如果有任何數據可用,則應將其讀取並放入列表中。我試圖把它放在一個線程中,但是這會阻塞,直到它可以讀取某些內容,而這不是我想要的。我想讓線程在後臺運行。我想知道這在球拍上是否可能。檢查輸入端口上的數據是否可用
我有以下代碼:
(define in '())
(define out '())
(define data '())
(define listener (tcp-listen 8085))
(define (discover)
(define (loop)
(if (tcp-accept-ready? listener)
(begin (let-values (((pi po) (tcp-accept listener)))
(set! in pi)
(set! out po)
(thread (read-thread pi)))
(loop))
'done))
(loop))
(define (read-thread port)
(let ((d (read port)))
(set! data (cons d data)))
(sleep 2)
(read-thread port))
我不知道'read-bytes'和'read-bytes-avail!*',也許我可以使用它。但我並不是很瞭解它,我如何將它與輸入端口一起使用?你能給出一些代碼來證明這一點嗎? – JNevens
其實看到瑞恩的答案。 (當我回答時,我沒有注意到你已經使用'thread',但沒有正確使用它。) –