1

我在问这是否可以直接从互联网连接两个应用程序,而不使用公共 IP 地址作为隧道或连接器。

我使用此代码从不同的网络连接连接每台计算机。

客户端上传文件以使用 FTP 发送到公共 IP 地址

function UploadToFtp(serverName, userid, password, fileName: string): LongBool;
var
  hNet, hCon: HINTERNET;
begin
  Result := False;
  hNet := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if Assigned(hNet) then
  begin
    hCon := InternetConnect(hNet, PChar(servername),
        INTERNET_DEFAULT_FTP_PORT, PChar(userid), PChar(password),
        INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0
    );
    if Assigned(hCon) then
    begin
      Result := FtpPutFile(hCon, PChar(fileName),
          PChar(ExtractFileName(fileName)), FTP_TRANSFER_TYPE_ASCII, 0
      );
      InternetCloseHandle(hCon);
    end else ShowMessage(SysErrorMessage(GetLastError));
    InternetCloseHandle(hNet);
  end else ShowMessage(SysErrorMessage(GetLastError));
end;

服务器从公共 IP 地址收集信息。

function DownLoadFileFromFTP(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
  good:boolean;
begin
  hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  good := FtpGetFile(hconnect, pchar(remotefile), pchar(localfile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0);
  InternetCloseHandle(hconnect);
  Result := good;
end;

> 有没有办法直接连接每台计算机而不使用 FTP,我的意思是套接字?或者有什么方法可以直接在来自不同网络的两台计算机之间连接?

它是否在每台计算机上使用(来自 Delphi 的 Web 服务)Web 组件?我真的不知道该怎么做,或者直接连接每个选项的任何选项。

谢谢

4

2 回答 2

2

请查看 Sockets 单元以及 TTCPClient 和 TTCPServer 对象:

http://docwiki.embarcadero.com/Libraries/XE4/en/Web.Win.Sockets.TTcpClient

于 2013-07-23T07:34:02.927 回答
2

作为。做出这个答案,以便能够构建文本。

在 Delphi 中有很多交流方式

  1. 使用 Windows 标准库 WinSocet 和 Wininet - 搜索 MSDN
  2. 使用来自http://www.ararat.cz的突触库
  3. 使用来自http://www.overbyte.be的 Internet Communication Suite
  4. 使用来自http://www.indyproject.org/Sockets/wizard/DownloadWizard.en.aspx的 Internet Direct 库

这可能适合您在平面 LAN 环境中工作,制作像https://sourceforge.net/projects/dreamchat/这样的应用程序

然而,如果你想进入互联网(如 FTP 标签所建议的那样),你最好改变你的策略。


p2p的问题包括

_1。互相寻找:

1a:在一个预定义的会面点(服务器)上,例如 Skype

1b:在用户指定的会面点(服务器)上,如 E-Donkey2000 或 BitTorrent

1c:或使用免费的互联网扫描,直到找到某人 Gnutella/G2 网络或基于 DHT 的无服务器 BitTorrents。

_2。检查其他对等方是否值得您信任。对于由文件哈希保证的文件交换 P2P(在他上传正确内容时关心对等方是公平的还是恶意的)。对于电脑游戏,通常使用一些 AntiCheat 工具来取得好坏参半。

_2a 确保所有中间节点都无法窃听您的数据(或者您不在乎他们是否这样做),并且他们不能故意篡改数据或由于某些随机错误而破坏数据,没有这一事实是通知由您的程序和重复传输请求。

_3。确保可以建立双向通信,即

_3a。获取您自己的一些公开可见的 IP 或它的 erzats

_3b。将此地址传达给未知的对等方

_3c。确保该地址实际上可以用于通信,这意味着使用 UDP、NatPMP、UPnP 和其他临时技术来固定一个 NAT 或多个嵌套 NAT,测试它们中的任何一个是否可以与给定的 NAT 一起工作。在某些情况下,也许 IPv6/TEREDO 可以用于这种情况。

_3d。优雅地降级为一些重新翻译的镜像服务器,以防没有一个对等方可以建立工作的“直接”公共地址。

所有这些问题都有其一罐蠕虫,您无法立即解决。您将不得不一一处理它们,包括提问和搜索维基百科的概述和教程。


我对新手最好的建议不是尝试这样做,而是抛弃 NIH 综合症并重新使用一些已经建立的网络。这可能包括

  1. XMPP 又名 Jabber。今天,许多人在 Google Mail(和 GTalk)或 Yandex Mail(和 Yandex Online)等上都有帐户。您的应用程序可以使用 XMPP 库连接到这些帐户并将它们用于基于 XML 的实时通信。它也不是严格意义上的P2P,但你需要的是沟通,而不是严格遵守条款。

  2. BitTorrent:uTorrent 最近介绍了 uTorrent DNA - 使用运行 uTorrent 应用程序作为网状网络传播任何自定义数据的 SDK。

  3. https://gnunet.org/

  4. TOR 和 I2P 可能会太慢,因为它们的重点不是快速通信,但它们确实存在。

  5. 以游戏为导向的服务,例如 Hamachi.cc

  6. 远程控制的帮助台服务,如 TightVNC 或 TeamViewer,通常可以建立私有 VPN,但需要安装或租用重新翻译的镜像服务器。

等等 - 只是做你的搜索。已经建立的网络多年来一直在处理这些挑战和初期问题,您最好重用他们浪费时间和精力来开发自己的劣质(并且将来会变得劣质)解决方案的经验

于 2013-07-23T07:42:20.953 回答