如何使用wxWidgets通过公共IP地址检索和连接

时间:2016-06-14 01:20:44

标签: wxwidgets

我正在尝试使用wxWidgets构建一个非常简单的聊天应用程序。目前,我可以使用自己的LAN IP地址在本地计算机和虚拟机上打开软件。我可以通过wxGetFullHostName()函数检索每台机器的本地IP地址;然后我手动将此值输入另一个实例,以便它们连接。在这个阶段,一切都运作良好。

但是,现在我想将.exe发送给其他地方的朋友。如何让应用程序公开机器公共IP地址,以便我可以将它提供给我的朋友连接到我的实例?他们的任何其他要求是否让这两个实例相互连接?

我正在使用C ++,但我认为这个问题并不重要。

1 个答案:

答案 0 :(得分:0)

对于在NAT后面运行的独立于平台的方法,我建议使用ipifyhttps://www.ipify.org/)。

在C ++和wxWidgets中有很多方法可以实现这一点。可能最好使用curlhttps://curl.haxx.se/libcurl/)。

但是,对于'纯'wxWidgets实现,您可以尝试对minimal.cpp示例进行以下修改:

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