Microsoft DirectX 9.0


The NATResolver sample shows how the IDirectPlay8NATResolver interface can be used to implement address resolution for players behind Network Address Translation (NAT) devices. This interface acts as a simple server, which accepts queries and reflects the perceived address back to the caller.


Source: (SDK root)\Samples\C++\DirectPlay\NATResolver

Executable: (SDK root)\Samples\C++\DirectPlay\NATResolver

User's Guide

When the sample starts, an IDirectPlay8NATResolver object is created that waits for queries. The sample always listens on all available IPv4 devices for incoming queries. If Require password is checked, queries are first screened for the plain text password before allowing Microsoft?DirectPlay?to return the resolved address.

The dialog displays the list of addresses currently in use, as well as the number of incoming queries and outgoing responses.

Note  If you choose the Internetwork Packet Exchange (IPX) service provider and want to have DirectPlay perform a search for the address, select the use DPNSVR check box.

Programming Notes

DirectPlay handles most of the address resolution work, interrupting only to check that incoming queries are from authorized clients. The IDirectPlay8NATResolver::Initialize method sets up the message callback for client authorization, and the IDirectPlay8NATResolver::Start method starts the server on the requested device.

DirectPlay informs your program about client queries with DPN_MSGID_NAT_RESOLVER_QUERY messages, which contain the client address and given password. A successful return value from this callback instructs DirectPlay to handle the address resolution. A failed return value cancels the resolution but continues executing the associated DirectPlay call. Using the password allows you to deny access to your resolution server for clients who are not part of your game.

© 2002 Microsoft Corporation. All rights reserved.