如何在德尔福的 IUPnPNAT 接口中使用端口转发



我想将端口转发到 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 的文档,使用不同的代码片段(与此类似(。

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

只是一些额外的信息:

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

我建议使用 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;

最新更新