使用UPnP进行端口转发

时间:2013-11-09 19:23:25

标签: delphi delphi-xe3 indy10

我正在delphi indy 10中开发一个p2p聊天应用程序。我有两个问题。

1.我正在使用此功能进行端口打开。它给Coinitialize没有被称为错误.i声明但是不知道我是否在正确的位置声明它,因为如果我在Xp中运行它仍然会给出这个错误。

2.如果我正在使用udp打孔,那为什么我需要调用此功能?如果我这样做,我就无法聊天 - 不要打电话给这个功能。

  procedure AddPortThroughUPnP;

  var
  NAT     : Variant;
  Profile : Variant;
  Ports   : Variant;

begin

  if ( not fEnableUPnP ) or ( fServerRole ) then exit;

  if fWindowsName = WINXP then
  begin
  try
  Coinitialize(nil);
    NAT      := CreateOleObject ( 'HNetCfg.FwMgr' );
    Profile  := NAT.LocalPolicy.CurrentProfile;

    if not VarIsClear ( Profile ) then
    begin

      Ports          := CreateOLEObject('HNetCfg.FWOpenPort');
      Ports.Name     := 'UDP Server 6002';
      Ports.Port     := 6002;
      Ports.Scope    := 0;
      Ports.Protocol := 17;
      Ports.Enabled  := True;

      Profile.GloballyOpenPorts.Add ( Ports );

    end;
  finally
     Couninitialize;
  end;

  end
  else
  begin
         try
   Coinitialize(nil);
    NAT   := CreateOleObject ( 'HNetCfg.NATUPnP' );
    Ports := NAT.StaticPortMappingCollection;

    if not VarIsClear ( Ports ) then
       Ports.Add
       ( 6002, 'UDP', fExternalPort, fLocalIP, True, 'UDP Server 6002' );

         finally
         Couninitialize;
         end;
  end;
end;

0 个答案:

没有答案