如何在Delphi中使用IUPnPNAT接口进行端口转发

问题描述 投票:0回答:1

我想将端口转发到Delphi中的开放服务器连接(我正在使用TServerSocket)。

我正在使用我在另一个StackOverflow问题中找到的这个过程:

procedure AddUPnPEntry(Port: Integer; const Name: ShortString; LAN_IP: string);
var
  Nat: Variant;
  Ports: Variant;
begin
  if not (LAN_IP = '127.0.0.1') then
    begin
      Nat   := CreateOleObject('HNetCfg.NATUPnP');
      Ports := Nat.StaticPortMappingCollection;
      if not VarIsClear(Ports) then
        begin
          CoInitialize(nil);
          try
            ShowMessage(IntToStr(Ports.count));
            Ports.Add(Port,'TCP',Port,LAN_IP,True,name);
          finally
            CoUninitialize;
          end;
        end;
    end;
end;

我已经尝试使用不同的代码片段(类似于此)阅读MSDN's documentation

我想了解为什么这段代码不起作用。我得到的只是一个访问冲突错误消息。

只是一些额外的信息:

我的路由器确实支持UPnP。我正在使用Windows 7和Delphi 7。

delphi delphi-7 nat upnp
1个回答
0
投票

我建议使用Id-Components,因为它们具有易于使用的转发功能。附件是TCP和UDP转发的示例。您需要填写服务器以转发到您的计算机上的端口以及要将其转发到服务器上的端口。

uses
IdMappedPortUDP, IdMappedPortTCP;


tcpForwader: TIdMappedPortTCP;     
udpForwader: TIdMappedPortUDP;

tcpForwader             := TIdMappedPortTCP.Create(nil);
tcpForwader.MappedHost  := <ServerToForwardTo>;
tcpForwader.MappedPort  := <PortOnServer>;
tcpForwader.DefaultPort := <LocalPort>;
tcpForwader.Active      := True;

udpForwader                := TIdMappedPortUDP.Create(nil);
udpForwader.MappedHost     := <ServerToForwardTo>;
udpForwader.MappedPort     := <PortOnServer>;
udpForwader.DefaultPort    := <LocalPort>;
udpForwader.Active         := True;
© www.soinside.com 2019 - 2024. All rights reserved.