2016-03-25 3 views
0

にリスニング:QTcpServer私は<code>QTcpServer</code>を開始するためのコードの塊を以下しているアドレス0.0.0.0

void UeConnectionServer::ueStartConnectionServer() 
{ 
    QString logText=QString(); 

    if(!this->isListening()) 
    { 
     if(!this->listen(QHostAddress::Any, 
         1234)) 
     { 
      logText=tr("[ERROR]").append(" ") 
           .append(QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss:zzz")) 
           .append(" ") 
           .append(this->errorString()); 

      emit this->ueSignalEventInfoAdded(logText); 
     } 
     else 
     { 
      logText=tr("[INFO]").append(" ") 
           .append(QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss:zzz")) 
           .append(" ") 
           .append(tr("Server started on address ") 
           .append(this->serverAddress().toString()) 
           .append(":") 
           .append(QString::number(this->serverPort()))); 

      emit this->ueSignalEventInfoAdded(logText); 
     } // if 
    } // if 
} // ueStartConnectionServer 

サーバーが正常に開始されたが、しかし、次のログ行は、それがアドレス0.0.0.0をリッスンしている示しています

サーバーがアドレス0.0.0.0:1234

なぜQTcpServerないで開始265:

[INFO] 2016年3月25日12:02:36私の場合、ワークステーションのIPを取得する192.168.0.100。私はLinuxを使用して、ここifconfig出力されています:

eth0  Link encap:Ethernet HWaddr 1c:6f:65:92:82:02 
      UP BROADCAST MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:18984 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:18984 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:3979893 (3.9 MB) TX bytes:3979893 (3.9 MB) 

vmnet1 Link encap:Ethernet HWaddr 00:50:56:c0:00:01 
      inet addr:172.16.115.1 Bcast:172.16.115.255 Mask:255.255.255.0 
      inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:327 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

vmnet8 Link encap:Ethernet HWaddr 00:50:56:c0:00:08 
      inet addr:192.168.77.1 Bcast:192.168.77.255 Mask:255.255.255.0 
      inet6 addr: fe80::250:56ff:fec0:8/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:326 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

wlan0  Link encap:Ethernet HWaddr 6c:fd:b9:2d:cc:90 
      inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0 
      inet6 addr: fe80::6efd:b9ff:fe2d:cc90/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:1047445 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:583455 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:1267590187 (1.2 GB) TX bytes:99542638 (99.5 MB) 

が、多分QTcpServer試みは、リスト内の最初のネットワーク・インタフェースからIP addressを取得することを問題とないアクティブ 1ですか?

+0

あなたはどういうことを言っていますか?サーバーは 'QHostAddress :: Any'をリッスンするようにサーバーに要求しました。つまり、' 0.0.0.0'アドレス(つまり、**任意のインターフェイス**)をリッスンします。 – peppe

+0

@peppeはい私は 'QHostAddress :: Any'を聞くように依頼しましたが、' 0.0.0.0'を聞いていますが、 'this-> serverAddress()。toString()'も '0.0.0.0 '、それは私のアクティブなインターフェイスIP、すなわち' 192.168.0.100'を返すべきですか? – KernelPanic

+0

あなたはそのインターフェイスにバインドしていないので、*任意の*インターフェイスにバインドしました。別のインターフェースが別のIPを持ってくると、それに拘束されます。既存のものがダウンしても。 – peppe

答えて

2

QTドキュメントはそう言うので:QHostAddress

QHostAddress ::どれ:IPv4の任意のアドレス。 QHostAddress( "0.0.0.0")に相当します。

あなたのサーバーは、すべてのIPアドレスをリッスンしているので心配する必要はありません。複数のネットワークインターフェイスがあります。それらのすべてから到達することができます。192.168.0.100を指定すると、サーバーを1つのネットワークインターフェイスに制限します。

+0

しかし、どのようにして 'IPアドレス 'を稼働させるのですか?私はどの 'IPアドレス 'がサーバープロセス/アプリケーションから聞いているのかを知りたいです! – KernelPanic

+0

あなたはすでにそれを持っています(ifconfigを介して)。指定されたすべてのネットワークインターフェイス。ですから、vmnet1(172.16.115.1)、vmnet8(192.168.77.1)、wlan0(192.168.0.100) – RvdK

+0

ではOKですが、Qtコードから**アクティブなインターフェース**のIPアドレスを取得したいので、どのIPアドレスとどのポートが私のサーバーアプリケーションであるかをユーザに通知します。 – KernelPanic

関連する問題