gpt4 book ai didi

delphi - 使用Delphi进行P2P连接

转载 作者:行者123 更新时间:2023-12-02 00:05:39 25 4
gpt4 key购买 nike

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

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

The client uploading the file to send to public ip address using FTP

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;

The Server to collect information from public ip address.

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;

> Is there a way to directly connect each computer without using the FTP, I meant the socket? or any means to connect directly between the two computers from different network?

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

谢谢

最佳答案

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

在 Delphi 中有很多沟通方式

  1. 使用 Windows 标准库 WinSocet 和 Wininet - 搜索 MSDN
  2. 使用 http://www.ararat.cz 中的突触库
  3. 使用 http://www.overbyte.be 中的互联网通信套件
  4. 使用 http://www.indyproject.org/Sockets/wizard/DownloadWizard.en.aspx 中的 Internet Direct 库

这可能适合您在扁平局域网环境中工作,制作类似 https://sourceforge.net/projects/dreamchat/ 的应用程序

但是,如果您想进入互联网(如 FTP 标签建议的那样),您最好改变您的策略。

<小时/>

p2p的问题包括

_1。寻找彼此:

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

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

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

_2。检查对方是否值得你信任。对于由文件哈希保证的文件交换 P2P(当他上传正确的内容时,谁关心对等点是公平的还是恶意的)。对于电脑游戏,通常使用一些反作弊工具,效果好坏参半。

_2a 确保所有中间节点无法窃听您的数据(或者您不关心他们是否窃听),并且他们无法故意篡改数据或由于某些随机错误而损坏数据,否则事实上,您的程序会通知您并要求重复传输。

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

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

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

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

_3d。优雅地降级为某些重新翻译镜像服务器,以防没有任何对等方可以建立到它的工作“直接”公共(public)地址。

所有这些问题都有其一 jar 蠕虫,你无法立即解决它们。您必须一一处理它们,包括提出问题和搜索维基百科概述和教程。

<小时/>

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

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

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

  3. https://gnunet.org/

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

  5. 面向游戏的服务,例如 Hamachi.cc

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

等等 - 只需进行搜索即可。已经有一些成熟的网络多年来一直在处理这些挑战和初期问题,您最好重用他们的经验,浪费时间和精力来开发您自己的劣质(并且在未来的几年中它将是劣质的)解决方案

关于delphi - 使用Delphi进行P2P连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com