我想将端口转发到 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;