我想将端口转发到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。
我建议使用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;