【Qt】サブネットを超えたTCPの接続方法について



  • はじめまして、戸塚と申します。

    現在Windowsアプリケーションを作成しており、Qt5.10.0にてサブネットを超えたTCP接続をしたいと思っております。

    環境は以下の通りです。
    ・Windows10
    ・VS2015 (C++)
    ・Qt5.10.0
    ・オンボードとUSBを含めて、複数のネットワークカードが利用可能な状態
    ・1つのネットワーク設定を固定IP Addressとして、以下のように接続
    [PC(192.168.1.228) == (192.168.1.1) Router (192.168.100.1) == (192.168.100.26)]

    現在QTcpSocketを利用してTCPの接続を試みておりますが、
    同一サブネット内であれば問題ありませんが、別サブネットに対して行うと接続に失敗しているようです。

    ソースコードは以下のようになっています。

    @
    /* 本来はクラスをオーバーライドしていますが、伝わりやすいように変数にしています */
    QTcpSocket socket;

    /* TCP接続 */
    QHostAddress target( "192.168.100.26" );
    socket.connectToHost( target, 13200 );

    if( !socket.waitForConnected( 5000 ) ){
    return false; // ここでタイムアウトしてしまう
    }
    @

    またLocalAddressの設定の問題を疑い、自身のローカルアドレスの設定を試してみましたが
    問題は解決しませんでした。
    以下がサンプルとなります。

    @
    /* 本来はクラスをオーバーライドしていますが、伝わりやすいように変数にしています */
    QTcpSocket socket;

    /* 自身のLocalAddress設定 */
    QHostAddress pcAddress( "192.168.1.228" );
    socket.setLocalAddress( pcAddress );
    socket.setLocalPort( 0 );

    /* TCP接続 */
    QHostAddress target( "192.168.100.26" );
    socket.connectToHost( target, 13200 );

    if( !socket.waitForConnected( 5000 ) ){
    return false; // ここでタイムアウトしてしまう
    }
    @

    補足としては、コマンドプロンプトでのPing[ipconfig 192.168.100.26 -S 192.168.1.228]や、送信元IP Addressが指定可能なツールであれば、接続ができれており、WireSharkにてパケットの送受信も確認できております。

    何かQtの足りない設定や、使用方法等に問題がありますでしょうか?
    ご回答宜しくお願いいたします。



  • @yasuhito
    自己解決できましたので記述しておきます。
    setLocalAddressをbindに変更するだけでした。

    お騒がせしました。


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.