2

如果我有一个超级简单的线程 TCP 服务器,例如:

USING: accessors io io.encodings.utf8 io.servers 
    io.sockets kernel prettyprint threads ;

: handle-client ( -- )
   remote-address . ;

: <my-server> ( -- threaded-server )
    utf8 <threaded-server>
        "server" >>name
        1234 >>insecure
        [ handle-client ] >>handler ;

: start-my-server ( -- )
    <my-server> [ start-server ] in-thread start-server drop ;

这只会将文本打印remote-address到客户端,这非常有帮助。那是因为remote-address是一个符号……它的价值在哪里?的文档remote-address说:

保存当前客户端连接的地址说明符的变量。

并且文档<threaded-server>说:

线程服务器实例的处理程序插槽应设置为处理客户端连接的引号。客户端处理程序在自己的线程中运行,以下变量反弹:

• 输入流
• 输出流
• 本地地址
远程地址
• 线程服务器

伟大的!这意味着我可以获取客户的 IP。

然后它链接到Address specifiers,这似乎是相关的,但没有清楚地解释如何从remote-address.

如何获取客户端的 IP 地址?

4

1 回答 1

1

@fede s。在评论中指出:get将采用 avariable及其get值。

所以我的问题代码变成了:

: handle-client ( -- )
   remote-address get host>> print flush ;

: <my-server> ( -- threaded-server )
    utf8 <threaded-server>
        "server" >>name
        1234 >>insecure
        [ handle-client ] >>handler ;

: start-my-server ( -- )
    <my-server> [ start-server ] in-thread start-server drop ;
于 2016-04-09T22:24:11.133 回答