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

时间:2016-04-09 03:42:28

标签: sockets stream server factor-lang

如果我有一个超级简单的线程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的{​​{3}}说:

  

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

<threaded-server>上的文档说:

  

线程服务器实例的处理程序槽应设置为a   处理客户端连接的报价。运行客户端处理程序   他们自己的线程,以下变量反弹:

     

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

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

然后它链接到documentation,这似乎是相关的,但没有清楚地解释如何从remote-address获取数据。

如何获取客户的IP地址?

1 个答案:

答案 0 :(得分:1)

@fede s.在评论中将其钉住:get将获取variableget的值。

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

: 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 ;