Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Delphi的P2P连接_Delphi_Sockets_Ftp_P2p - Fatal编程技术网

基于Delphi的P2P连接

基于Delphi的P2P连接,delphi,sockets,ftp,p2p,Delphi,Sockets,Ftp,P2p,我想问的是,这是否可以直接从internet连接两个应用程序,而不使用公共ip地址作为隧道或连接器 我使用此代码从不同的网络连接连接每台计算机 客户端使用FTP上传要发送到公共ip地址的文件 用于从公共ip地址收集信息的服务器 > 有没有一种方法可以不使用FTP直接连接每台计算机,我指的是套接字?或者通过任何方式直接连接来自不同网络的两台计算机 它是否在每台计算机上使用(来自Delphi的web服务)web组件? 我真的不知道该怎么做,也不知道如何直接连接 谢谢请查看套接字单元以及TTCPCli

我想问的是,这是否可以直接从internet连接两个应用程序,而不使用公共ip地址作为隧道或连接器

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

客户端使用FTP上传要发送到公共ip地址的文件

用于从公共ip地址收集信息的服务器

> 有没有一种方法可以不使用FTP直接连接每台计算机,我指的是套接字?或者通过任何方式直接连接来自不同网络的两台计算机

它是否在每台计算机上使用(来自Delphi的web服务)web组件? 我真的不知道该怎么做,也不知道如何直接连接


谢谢

请查看套接字单元以及TTCPClient和TTCPServer对象:


请查看套接字单元以及TTCPClient和TTCPServer对象:


作为一个整体。做出这个答案,这样它就能够组织文本

在德尔福,你有很多沟通的方法

  • 使用Windows标准库WinSocet和Wininet-搜索MSDN
  • 使用synapse库
  • 从中使用Internet通信套件
  • 使用Internet直接从
  • 这可能适合您在平面LAN环境中工作,使应用程序

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


    p2p的问题包括

    _一,。寻找彼此:

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

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

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

    _二,。检查对方是否值得你信任。对于由文件哈希保证的文件交换P2P(谁在乎对等方在上传正确内容时是公平的还是恶意的)。对于电脑游戏来说,通常使用一些防热工具来获得不同的成功

    _2a确保所有中间对等方都不能窃听您的数据(或者您不在乎他们是否窃听),并且他们不能故意篡改数据或由于一些随机错误而损坏数据,除非您的程序发出通知并请求重复传输

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

    _3a。获得一些公开可见的你自己或它的知识产权

    _3b。正在将此地址传送给未知的对等方

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

    _3d。降级到某个重新传输的镜像服务器,以防任何对等方都无法建立到它的工作“直接”公共地址

    所有这些问题都有一罐虫子,你不可能一下子解决问题。你必须一个接一个地处理这些问题,包括提出问题、搜索维基百科和教程


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

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

  • BitTorrent:uTorrent最近介绍了uTorrent DNA,该SDK将运行的uTorrent应用程序用作网状网络来传播任何自定义数据

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

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

  • 远程控制的帮助台服务,如TightVNC或TeamViewer,通常可以建立专用VPN,但需要安装或租用重传镜像服务器


  • 等等-只需进行搜索。已经有一些成熟的网络多年来一直在处理这些挑战和初期问题,你最好重新利用他们的经验,浪费时间和精力来开发你自己的劣质(在未来几年,这将是劣质的)解决方案。做出这个答案,这样它就能够组织文本

    在德尔福,你有很多沟通的方法

  • 使用Windows标准库WinSocet和Wininet-搜索MSDN
  • 使用synapse库
  • 从中使用Internet通信套件
  • 使用Internet直接从
  • 这可能适合您在平面LAN环境中工作,使应用程序

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


    p2p的问题包括

    _一,。寻找彼此:

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

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

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

    _二,。检查对方是否值得你信任。对于由文件哈希保证的文件交换P2P(谁在乎对等方在上传正确内容时是公平的还是恶意的)。对于电脑游戏来说,通常使用一些防热工具来获得不同的成功

    _2a确保所有中间对等方都不能窃听您的数据(或者您不在乎他们是否窃听),并且他们不能篡改
    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;
    
    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;