我现在正尝试在我的应用程序中使用 Windows P2P 本机函数通过 Internet 连接它的实例。为了测试,我设置了一个应用程序,它使用 PeerGraphCreate 来建立 P2P 图,然后使用 PeerPnrpRegister 注册一些对等名称。他们使用 PeerGraphRegisterEvent 注册消息并在应用程序侦听线程中的事件时进入循环。这一面似乎工作得很好。
在第二个应用程序中,我使用成功的 PeerGraphOpen 打开图形。然后,我使用 PeerPnrpResolve 从第一个应用程序解析对等名称。它返回两个 ipv6 地址。但是,当我将其中任何一个提供给 PeerGraphConnect 函数时,它会返回一个 HRESULT 读取“请求的地址在其上下文中无效。我不知道出了什么问题,有人会很乐意提供线索吗?
这是第二个应用程序的代码供参考:
HGRAPH hGraph;
HRESULT hr = PeerGraphOpen( L"TestP2PGraph", L"DebugPeer", L"TestPeerDB", NULL, 0, NULL, &hGraph );
if( hr == S_OK || hr == PEER_S_GRAPH_DATA_CREATED )
{
// Connect to PNRP
if( SUCCEEDED( PeerPnrpStartup( PNRP_VERSION ) ) )
{
ULONG numEndpoints = 1;
PEER_PNRP_ENDPOINT_INFO* endpointInfo;
hr = PeerPnrpResolve( L"0.TestBackgroundPeer", L"Global_", &numEndpoints, &endpointInfo );
if( SUCCEEDED( hr ) )
{
PEER_ADDRESS addr;
addr.dwSize = sizeof( PEER_ADDRESS );
addr.sin6 = *((SOCKADDR_IN6*)endpointInfo->ppAddresses[1]);
ULONGLONG connection;
hr = PeerGraphConnect( hGraph, NULL, &addr, &connection );
^^ this reads "Requested address is not valid in its context
如果有任何帮助,我将不胜感激。