我试图从客户端向服务器发送消息,并在服务器上打印消息.
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)
Run Code Online (Sandbox Code Playgroud)
client.rkt:
#lang racket
(define-values (in out) (tcp-connect "localhost" 9876))
(write "Hello" out)
Run Code Online (Sandbox Code Playgroud)
我跑了server.rkt然后client.rkt在终端.但是服务器只打印#<eof>而不是Hello消息.
这是为什么?以及如何正确地做到这一点?
您需要flush-output在发送消息后刷新客户端上的输出.在客户端和服务器上,不要忘记在使用close-input-port和close-output-port使用后干净地关闭端口.
编辑:要回答问题的第一部分,你得到的#<eof>是因为你的客户端在刷新输出端口之前完成,这会关闭这个输出端口,因此服务器收到这个文件结束消息(但意味着"结束" -stream"而不是,这里",你可以测试eof-object?.