2017-02-24 15 views
2

私の主な機能はこれですされていません。錆TcpListenerは、応答外部の要求

fn main() { 
let listener = TcpListener::bind("192.168.1.187:9527").unwrap(); 
println!("Listening for connections on port {}", 9527); 
for stream in listener.incoming() { 
    match stream { 
     Ok(stream) => { 
      thread::spawn(move || { 
       let req_stream = &stream.try_clone().unwrap(); 
       let req = request::new(req_stream); 
       let res = response::new(stream.try_clone().unwrap()); 
       handle_client(req, res) 
      }); 
     } 
     Err(e) => println!("Unable to connect: {}", e), 
    } 
} 
} 

私は127.0.0.1:9527を通じて応答を得ることができますが、私は私のオフィスで私のパブリックIPである192.168.1.187:9527からの応答を取得することはできません、でもこれをやってサーバーがデプロイされているコンピュータで実行します。

rustはローカルホストでのみ動作しますか?外部の要求を受け入れる方法を教えてください。

+0

接続のタイムアウトはありますか? – Prabhu

+0

着信要求をブロックしているマシン上のファイアウォールである可能性がありますか? – Lukazoid

+0

@PrabhuそれはERR_CONNECTION_REFUSEDと書かれています – FrontMage

答えて

3

ss -lnpは、サーバーがループバックアドレス127.0.0.1にのみバインドされていることを示しています。したがって、クライアントは192.168.1.187:9527に接続しようとしてRSTを受信して​​います。

試してみてください。

TcpListener::bind("0.0.0.0:9527").unwrap();

これは、システムで利用可能なすべてのインターフェイスにバインドするものとします。

"192.168.1.187"が機能しなかった理由がわかりません。しかし、 "0.0.0.0"を試して、ss出力を見てください。

+0

'tcp LISTEN 0 128 *:9527 *:*ユーザー:(( "サーボ"、pid = 2228、fd = 3)) 'これは問題を解決します。また、なぜ '127.0.0.1'がうまくいかないのだろう...助けてくれてありがとう〜 – FrontMage