2016-10-24 3 views
1

Ich habe einige Threads über meine Frage gesehen, aber, noch kann ich nicht scheinen, das Problem zu lösen, und die Antworten sind nicht ausreichend. Also hier ist die Aufgabe: Ich habe 2 PCs. Man muss 100 UDP-Pakete mit einfachen Testdaten übertragen und die andere Maschine muss die Datagramme lesen. Mein Code ist wie folgt:QUdpSocket Client-Server Remote-Host nicht verbindbar

Der Server:

m_socket.udp = new QUdpSocket (this);

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())); 

Also ... zuerst - die Bindung an IP von Maschine 1 schlägt fehl. Ich darf seine IP nicht angeben.

Der Client ist einfach:

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")); 
} 

So Client-Code, wie in wireshark gesehen, auf meinen Server Maschine kommt. Aber mein Server Qt Code versagt mich. Irgendwelche Hilfe hier?

+0

Könnten Sie bitte genauer sein? Was siehst du in Wireshark? Was meinst du mit "zuerst - die Bindung an IP von Maschine 1 schlägt fehl"? – Prabhu

+0

Ich bin an den Remote-Host gebunden, zB: 192.168.32.150 mit Port 1234, das wäre Maschine 1, und von 192.168.32.150 sende ich 100 Datagramme an die Maschine, die wartet. Ein einfaches Beispiel, das 2 UDP-Sockets verbindet, wäre großartig. Aber das Beispiel muss zwischen 2 Computern sein. –

+0

Ist es so kompliziert, nur wenige Datagramme zwischen zwei Rechnern auszutauschen? Noch keine Antworten? –

Antwort

1

Noch niemand schlug vor, dass ich firewalled werden kann. Das war das Problem. Durch das Entfernen der Firewall wurde dies behoben.

0

Ich habe Setup eine anderen UDP-Socket eingehende Verbindungen zu behandeln, die Art und Weise:

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; 
    } 

} 

Aber es scheint, es ist nicht die richtige Art und Weise zu arbeiten. Wenn ich verbunden bin, kann ich den Peer-Host und den Port lesen, aber der Auxiliary-Socket muss für unadress an was gebunden sein? Ich bin verwirrt mit dem UDP. [EDIT] Nur um hinzuzufügen, dass ich nie in den ReadyReadUdp() Slot einbricht, habe ich dort einen Haltepunkt gesetzt. Der Leser ist Standart 1, aber der Slot wird nie aufgerufen. Also ich denke, es gibt nichts zu lesen.

Verwandte Themen