2014-02-06 74 views
4

我試圖從客戶端發送消息到服務器,並在服務器上打印消息。如何在球拍中使用TCP?

server.rkt:

#lang racket 
(define the-listener (tcp-listen 9876)) 
(define-values (in out) (tcp-accept the-listener)) 
(displayln (read in)) 
(tcp-close the-listener) 

client.rkt:

​​

我跑server.rkt然後在終端client.rkt。但服務器僅打印#<eof>而不是Hello消息。

這是爲什麼?如何正確地做到這一點?

回答

5

您需要在發送消息後使用flush-output刷新客戶端的輸出。 不要忘記在使用後在客戶端和服務器上都乾淨地關閉端口close-input-portclose-output-port

編輯:要回答你的問題的第一部分,你會得到#<eof>,因爲你的客戶端完成之前,其輸出端口已被刷新,其中關閉該輸出端口,因此服務器接收檔案結尾此消息(但在這裏意味着「流結束」),您可以使用eof-object?進行測試。

+0

謝謝,Metaxal。你是如何瞭解這些的?我閱讀文檔並搜索了互聯網,但直到您的答案才找到。 – Ben

+2

我前段時間通過試驗和錯誤瞭解了這一點,並且可能在Racket郵件列表的幫助下查看了文檔。你也可以在這裏找到一些其他的相關信息(http://docs.racket-lang.org/guide/concurrency.html)。 – Metaxal

+0

非常感謝。 – Ben