2016-06-14 2 views
0

wxWidgets를 사용하여 아주 간단한 채팅 응용 프로그램을 만들려고합니다. 현재 로컬 컴퓨터와 가상 컴퓨터에서 LAN IP 주소로 소프트웨어를 열 수 있습니다. wxGetFullHostName() 함수를 통해 각 컴퓨터의 로컬 IP 주소를 검색 할 수 있습니다. 그런 다음이 값을 수동으로 다른 인스턴스에 입력하여 연결합니다. 이 단계에서는 모든 것이 잘 작동합니다.wxWidgets을 사용하여 공개 IP 주소를 통해 검색하고 연결하는 방법

그러나 이제 다른 곳으로 .exe를 보내고 싶습니다. 응용 프로그램에서 컴퓨터 공용 IP 주소를 노출하도록 설정하여 내 친구에게 제공하여 인스턴스에 연결할 수 있도록하려면 어떻게해야합니까? 두 인스턴스가 서로 연결되도록하는 다른 요구 사항이 있습니까?

저는 C++을 사용하고 있지만이 질문에별로 중요하지 않다고 생각합니다.

답변

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