2016-06-14 3 views
0

Ich versuche, eine sehr einfache Chat-Anwendung mit WxWidgets zu erstellen. Im Moment kann ich die Software auf meinem lokalen Rechner und auf einer virtuellen Maschine mit einer eigenen LAN-IP-Adresse öffnen. Ich bin in der Lage, jede Maschine lokale IP-Adresse über wxGetFullHostName() Funktion abzurufen; Ich gebe diesen Wert dann manuell in die andere Instanz ein, damit sie sich verbinden. In diesem Stadium läuft alles gut.Wie abzurufen und verbinden über öffentliche IP-Adressen mit wxWidgets

Allerdings möchte ich jetzt die .exe an einen Freund woanders senden. Wie kann ich die Anwendung dazu bringen, die öffentliche IP-Adresse der Maschine offenzulegen, damit ich sie meinem Freund zur Verbindung mit meiner Instanz bereitstellen kann? Sind irgendwelche anderen Anforderungen, die zwei Instanzen miteinander verbinden zu lassen?

Ich benutze C++, aber ich denke nicht, dass es viel auf diese Frage ankommt.

Antwort

0

Für eine plattformunabhängige Methode, die hinter NAT funktioniert, würde ich empfehlen, ipify() zu verwenden.

Es gibt viele Möglichkeiten, dies in C++ und wxWidgets zu erreichen. Möglicherweise einer der besten ist, curl (https://curl.haxx.se/libcurl/) zu verwenden.

jedoch für eine ‚reine‘ wxWidgets Implementierung können Sie die folgende Änderung an der minimal.cpp Probe versuchen:

#include <wx/sstream.h> 
#include <wx/protocol/http.h> 
#include <wx/msgdlg.h> 

MyFrame::MyFrame(const wxString& title) 
     : wxFrame(NULL, wxID_ANY, title) 
{ 
    wxHTTP http; 

    http.SetHeader("Content-type", "text/html; charset=utf-8"); 
    http.SetTimeout(10); 

    http.Connect("api.ipify.org"); 

    wxInputStream* httpStream = http.GetInputStream("/"); 

    if (http.GetError() == wxPROTO_NOERR) 
    { 
     wxString result; 
     wxStringOutputStream out_stream(&result); 
     httpStream->Read(out_stream); 

     wxMessageBox(result); 
    } 
    else 
    { 
     wxMessageBox("Unable to connect!"); 
    } 

    wxDELETE(httpStream); 
}