2016-10-24 8 views
1

私の質問についてはほとんどスレッドが見られませんでしたが、それでも問題を解決できないようで、応答が不十分です。それでは、私は2台のPCを持っています。簡単なテストデータで100個のUDPパケットを送信しなければならず、もう1台のマシンはデータグラムを読み取る必要があります。QUdpSocketクライアントとサーバーのリモートホストが接続できない

サーバは:次のように私のコードがある

m_socket.udp =新しいQUdpSocketを(この);

if (m_socket.udp->bind(QHostAddress("192.168.32.154"), 1234)) { 
    m_socket.udp->connectToHost(QHostAddress("192.168.32.154"), 1234); 
    m_socket.udp->waitForConnected(); 
} 
connect(m_socket.udp, SIGNAL(connected()), 
     this, SLOT(handleConnection())); 
connect(m_socket.udp, SIGNAL(readyRead()), 
     this, SLOT(readyReadUdp())); 

だから...まず、マシン1のIPへのバインディングが失敗します。 IPを指定してはいけません。

クライアントは単純です:

p_socket = new QUdpSocket(this); 
p_socket->connectToHost(QHostAddress("192.168.32.94"), 1234); 
connect(p_socket, SIGNAL(connected()), this, SLOT(writeDgram())); 
.... 
void writeDgram() { 
    p_socket->write(QByteArray("test")); 
} 

ので、クライアントコード、Wiresharkのに見て、私のサーバー・マシンになります。しかし、私のサーバーのQtコードは私に失敗します。どんな助け?

+0

もっと具体的に教えてください。 wiresharkで何を見ますか? 「最初にマシン1のIPへのバインディングが失敗する」という意味は何ですか? – Prabhu

+0

私はリモートホストにバインドしています。例:ポート1234の192.168.32.150、マシン1、192.168.32.150から待機中のマシンに100データグラムを送ります。 2つのUDPソケットを接続する簡単な例が素晴らしいでしょう。しかし、この例は2台のコンピュータの間になければなりません。 –

+0

2台のマシン間でデータグラムをほとんど交換しないのは難しいですか?答えはまだありませんか? –

答えて

1

しかし、誰も私がファイアウォールできるとは誰も提案しませんでした。それが問題でした。ファイアウォールを削除するとこれが解決されました

0

は、私はそのように着信接続処理するために、セットアップに別のUDPソケットをしました:

void Server::handleConnection() 
{ 
    std::cout << "Connected to host" << std::endl; 
    m_inaddr = new QUdpSocket(this); 
    connect(m_inaddr, SIGNAL(readyRead()), 
      this, SLOT(readyReadUdp())); 

    QHostAddress addr = m_socket.udp->peerAddress(); 
    quint16 port = m_socket.udp->peerPort(); 

    bool conn = m_inaddr->bind(45678); 

    if (conn) { 
     m_inaddr->connectToHost(addr, port); 
     std::cout << "Bound to: " << addr.toString().toStdString() 
        << " port:" 
        << port << std::endl; 
    } 

} 

をしかし、適切な方法を働いていないようです。私が接続されているとき、私はピアホストとポートを読むことができますが、inaddressの補助ソケットは何に縛られていなければなりませんか?私はUDPと混同しています。 [編集]私はreadyReadUdp()スロットに侵入しないことを追加するだけで、私はそこにブレークポイントを置く。リーダーはスタンダードなものですが、スロットは決して呼び出されません。だから私は読む準備ができていないと思う。

関連する問題