如何在Racket中使用TCP?

Ben*_*Ben 5 scheme tcp racket

我试图从客户端向服务器发送消息,并在服务器上打印消息.

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消息.

这是为什么?以及如何正确地做到这一点?

Met*_*xal 6

您需要flush-output在发送消息后刷新客户端上的输出.在客户端和服务器上,不要忘记在使用close-input-portclose-output-port使用后干净地关闭端口.

编辑:要回答问题的第一部分,你得到的#<eof>是因为你的客户端在刷新输出端口之前完成,这会关闭这个输出端口,因此服务器收到这个文件结束消息(但意味着"结束" -stream"而不是,这里",你可以测试eof-object?.

  • 我不久前通过反复试验和查看文档来了解这一点,可能是在Racket邮件列表的帮助下.你也可以找到一些其他的相关信息[这里](http://docs.racket-lang.org/guide/concurrency.html). (2认同)