我正在尝试使用wxWidgets构建一个非常简单的聊天应用程序。目前,我可以使用自己的LAN IP地址在本地计算机和虚拟机上打开软件。我可以通过wxGetFullHostName()
函数检索每台机器的本地IP地址;然后我手动将此值输入另一个实例,以便它们连接。在这个阶段,一切都运作良好。
但是,现在我想将.exe发送给其他地方的朋友。如何让应用程序公开机器公共IP地址,以便我可以将它提供给我的朋友连接到我的实例?他们的任何其他要求是否让这两个实例相互连接?
我正在使用C ++,但我认为这个问题并不重要。
答案 0 :(得分:0)
对于在NAT后面运行的独立于平台的方法,我建议使用ipify
(https://www.ipify.org/)。
在C ++和wxWidgets中有很多方法可以实现这一点。可能最好使用curl
(https://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);
}