外部マシンからTCPサーバーに接続できません

バラグラワル

Rustで基本的なTCPサーバーを作成しましたが、同じネットワーク上の別のコンピューターからアクセスできません。同様のPythonTCPサーバーも作成し、テストクライアントはそのサーバーに正常に接続できるため、ネットワークの問題ではありません。

use std::io::{Read, Write};
use std::net::{TcpListener, TcpStream};
use std::thread;
use std::str;

fn handle_read(mut stream: TcpStream) {
    let mut buf;
    // clear out the buffer so we don't send garbage
    buf = [0; 512];

    // Read and discard any data from the client since this is a read only server.
    let _ = match stream.read(&mut buf) {
        Err(e) => panic!("Got an error: {}", e),
        Ok(m) => m,
    };

    println!("Got some data");

    // Write back the response to the TCP stream
    match stream.write("This works!".as_bytes()) {
        Err(e) => panic!("Read-Server: Error writing to stream {}", e),
        Ok(_) => (),
    }

}

pub fn read_server() {
    // Create TCP server
    let listener = TcpListener::bind("127.0.0.1:6009").unwrap();
    println!("Read server listening on port 6009 started, ready to accept");

    // Wait for incoming connections and respond accordingly
    for stream in listener.incoming() {
        match stream {
            Err(_) => {
                println!("Got an error");
            }
            Ok(stream) => {

                println!("Received a connection");
                // Spawn a new thread to respond to the connection request
                thread::spawn(move || {
                    handle_read(stream);

                });

            }    
        }

    }
}

fn main() {
    read_server();
}
kennytm
let listener = TcpListener::bind("127.0.0.1:6009").unwrap();

にバインドする127.0.0.1:xxxxと、ソケットはローカルホストインターフェイスからのみリッスンできます。外部接続を許可するに0.0.0.0は、代わりににバインドして、すべてのネットワークインターフェイスからの接続を受け入れることができるようにします。

let listener = TcpListener::bind("0.0.0.0:6009").unwrap();

127.0.0.1とは異なるサーバーにバインドする理由を参照してください詳細については。


ところで、(1)

// not idiomatic
let _ = match stream.read(&mut buf) {
    Err(e) => panic!("Got an error: {}", e),
    Ok(m) => m,
};

あなたはResult::expectこれに使うことができます

// better
stream.read(&mut buf).expect("Got an error");

(2)

// not idiomatic
match stream.write("This works!".as_bytes()) {
    Err(e) => panic!("Read-Server: Error writing to stream {}", e),
    Ok(_) => (),
}

"aaa".as_bytes()あなたの代わりに単に書くことができますb"aaa"

// better
stream.write(b"This works!").expect("Read-Server: Error writing to stream");

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

外部からLinuxサーバーに接続できません

分類Dev

ローカルマシンからリモートサーバー10060にmyqlに接続できません

分類Dev

ローカルマシンからGoogleComputeEngineのkafkaサーバーに接続できません

分類Dev

外部マシンからkafkaに接続できません

分類Dev

自宅から外部RDSTSGサーバーに接続できません

分類Dev

CherryPyサーバーを実行しているDockerコンテナに外部から接続できません

分類Dev

仮想マシンのAzuremysqlサーバーに接続できません

分類Dev

サーバーの再起動後、Windows7マシンからリモート接続できません

分類Dev

Javajdbcからmssqlサーバーに接続できません

分類Dev

MacOSからSSHサーバーに接続できません

分類Dev

RStudioからMicrosoftSQLサーバーに接続できません

分類Dev

ホーム接続からサーバーにSSH接続できません

分類Dev

サーバーアプリケーションからmongodbをsslに接続できません

分類Dev

サーバーが外部に接続できません

分類Dev

ローカルマシンからサーバーで実行されているmysql dockerに接続できません(エラー10061)-Workbench

分類Dev

ローカルマシンからサーバーで実行されているmysql dockerに接続できません(エラー10061)-Workbench

分類Dev

SIM900シールドを使用してArduinoUnoからTCP経由でローカルマシンIPに接続できません

分類Dev

Hawtioダッシュボードからリモートサーバーに接続できません

分類Dev

Hawtioダッシュボードからリモートサーバーに接続できません

分類Dev

リモートサーバーからMySQLに接続できません

分類Dev

Google CloudPostgreSQLがサーバーから接続できません

分類Dev

リモート マシンの IIS サーバーに接続できません

分類Dev

サーバーに接続できません:dial tcp [:: 1]:8080:connectex:ターゲットマシンがアクティブに拒否したため、接続できませんでした

分類Dev

サーバーに接続できません:dial tcp [:: 1]:8080:connectex:ターゲットマシンがアクティブに拒否したため、接続できませんでした

分類Dev

TCPクライアントがTCPサーバーに接続できません

分類Dev

LinuxのlaravelからAzure SQLサーバーに接続できません

分類Dev

AzureアプリからMSSQLサーバーに接続できません

分類Dev

Centos6のPHPからmssqlサーバーに接続できません

分類Dev

nginxサーバーからphpファイルに接続できません

Related 関連記事

  1. 1

    外部からLinuxサーバーに接続できません

  2. 2

    ローカルマシンからリモートサーバー10060にmyqlに接続できません

  3. 3

    ローカルマシンからGoogleComputeEngineのkafkaサーバーに接続できません

  4. 4

    外部マシンからkafkaに接続できません

  5. 5

    自宅から外部RDSTSGサーバーに接続できません

  6. 6

    CherryPyサーバーを実行しているDockerコンテナに外部から接続できません

  7. 7

    仮想マシンのAzuremysqlサーバーに接続できません

  8. 8

    サーバーの再起動後、Windows7マシンからリモート接続できません

  9. 9

    Javajdbcからmssqlサーバーに接続できません

  10. 10

    MacOSからSSHサーバーに接続できません

  11. 11

    RStudioからMicrosoftSQLサーバーに接続できません

  12. 12

    ホーム接続からサーバーにSSH接続できません

  13. 13

    サーバーアプリケーションからmongodbをsslに接続できません

  14. 14

    サーバーが外部に接続できません

  15. 15

    ローカルマシンからサーバーで実行されているmysql dockerに接続できません(エラー10061)-Workbench

  16. 16

    ローカルマシンからサーバーで実行されているmysql dockerに接続できません(エラー10061)-Workbench

  17. 17

    SIM900シールドを使用してArduinoUnoからTCP経由でローカルマシンIPに接続できません

  18. 18

    Hawtioダッシュボードからリモートサーバーに接続できません

  19. 19

    Hawtioダッシュボードからリモートサーバーに接続できません

  20. 20

    リモートサーバーからMySQLに接続できません

  21. 21

    Google CloudPostgreSQLがサーバーから接続できません

  22. 22

    リモート マシンの IIS サーバーに接続できません

  23. 23

    サーバーに接続できません:dial tcp [:: 1]:8080:connectex:ターゲットマシンがアクティブに拒否したため、接続できませんでした

  24. 24

    サーバーに接続できません:dial tcp [:: 1]:8080:connectex:ターゲットマシンがアクティブに拒否したため、接続できませんでした

  25. 25

    TCPクライアントがTCPサーバーに接続できません

  26. 26

    LinuxのlaravelからAzure SQLサーバーに接続できません

  27. 27

    AzureアプリからMSSQLサーバーに接続できません

  28. 28

    Centos6のPHPからmssqlサーバーに接続できません

  29. 29

    nginxサーバーからphpファイルに接続できません

ホットタグ

アーカイブ