2016-04-09 13 views
2

私が持っている場合のようにスーパーシンプルなスレッドTCPサーバー:これは単なる便利非常にあるクライアントにテキストremote-addressを出力します接続されたクライアントのIPアドレスを取得するにはどうすればよいですか?

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ため documentation氏は述べています:現在のクライアント接続のアドレス指定を保持

変数を。

そして<threaded-server>上のドキュメントは言う:

スレッド・サーバー・インスタンスのハンドラスロットは、クライアント接続を処理 引用に設定する必要があります。クライアントハンドラはリバウンド以下の変数で、 自分のスレッドで実行されている:入力ストリーム•

出力ストリーム•
ローカルアドレス•

リモートアドレス
•スレッド・サーバ

素晴らしい!それは私がクライアントのIPで得ることができることを意味します。

次に、Address specifiersにリンクしていますが、これは関連しているようですが、remote-addressからデータを取得する方法を明確に説明していません。

クライアントのIPアドレスを取得するにはどうすればよいですか?

+0

それが値にバインドされたシンボル(IOW変数:P)なら、あなたは 'それをGET'べきではないのですか?それはあなたに何を与えるのですか? @fedes。 –

+0

@fedes。 ....... * facepalm *ああ、*それは何のためだ。その答えをつくってください:P – cat

+0

私は正直なところ、「得る」ものが何だったのか分かりませんでした。 – cat

答えて

1

@fede s.は、コメント欄でそれを釘付け:getvariablegetその値をとります。

そこで質問から私のコードは次のようになります。

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

あなたはこの回答を受け入れるべきです、それはこれまで最高のものです! –

+0

@fedes。 xD SEはいつも "あなたはこの回答を24時間以内に受け入れることができます"と言ってから、私は離れて、* 24時間後に自分の答えを受け入れることができます。私に思い出させてくれてありがとう:P – cat

関連する問題