sockets - 如何获得连接的客户端的IP地址?

标签 sockets stream server factor-lang

如果我有一个 super 简单线程化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-addressdocumentation表示:

Variable holding the address specifier of the current client connection.



<threaded-server>上的文档说:

The handler slot of a threaded server instance should be set to a quotation which handles client connections. Client handlers are run in their own thread, with the following variables rebound:

• input-stream
• output-stream
• local-address
remote-address
• threaded-server



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

然后,它链接到似乎相关的Address specifiers,但没有明确说明如何从remote-address获取数据。

如何获得客户的IP地址?

最佳答案

@fede s.在注释中添加了该名称: get 将采用variable并使用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 ;

关于sockets - 如何获得连接的客户端的IP地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512483/

相关文章:

networking - 为 headless 服务器创建单独的 Unity 项目

objective-c - 无需运行循环的 MacOSX 套接字编程

json - 如何使用 JSONStream 对大对象进行字符串化

java - 为什么 1 的平方根等于 1 在 java 中返回 false?

找不到 Redis 默认配置

java - Netty 不使用 for 循环向服务器发送消息

sockets - 用于移动客户端/服务器应用程序的基于套接字与 HTTP 的通信

c - Ubuntu 上的套接字(不允许操作)

c++ - boost:tcp 客户端的 readline

objective-c - 防止 bash 将 stdin 转发到 stderr