【问题标题】:Get connecting client info with tcp-accept?使用 tcp-accept 获取连接客户端信息?
【发布时间】:2016-04-09 23:15:21
【问题描述】:

运行在 12321 端口的 echo 服务器很简单:

(define listener (tcp-listen 12321))
(define (mk-server)
  (let echo-server ()
    (define-values (in out) (tcp-accept listener))
    (thread (λ () (copy-port in out)
              (close-output-port out)))
    (echo-server)))

documentation 有很多tcp-whatever 的函数,但它们都返回boolean?tcp-listener?;我不知道哪一个会给我连接客户端的 IP 地址。

super simple socket server example tutorial 也只提到处理客户端发送的数据。

以上示例中的端口in 将包含客户端发送的所有数据(标头等),但不包含关于客户端的元数据。

例如,在Factor 中,<server> 对象的accept 方法返回一个用于写入/读取的双向流,以及一个数据元组:

T{ inet4 { host "127.0.0.1" } { port 36150 } }

【问题讨论】:

    标签: tcp racket


    【解决方案1】:

    想法是您使用端口in 读取从客户端发送的数据,写入out 的数据会自动发送到客户端。

    如果我正确阅读了文档,以下其中之一:

    (tcp-addresses in)
    (tcp-addresses out) 
    

    应该给你客户地址。

    【讨论】:

    • 我尝试用(tcp-addresses in) 做的任何事情都会给出expected number of values not received expected: 1 received: 2 values...:,我不明白——它需要1 个arg,我给了它1
    • @cat 试试(tcp-addresses in #f)(tcp-addresses out #f)
    • 同样的错误——问题不是它得到的参数数量,而是返回值,但是(list (tcp-addresses in #f))也会出错。
    • 啊!使用(define-values (val1 val2) (tcp-addresses in)) 接收两个值。
    • 打高尔夫球!提示:~anumber->string 短,(newline out)(write #\n out) 短。
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2020-01-12
    • 2018-12-30
    • 2010-11-18
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多