基于Delphi的P2P连接
我想问的是,这是否可以直接从internet连接两个应用程序,而不使用公共ip地址作为隧道或连接器 我使用此代码从不同的网络连接连接每台计算机 客户端使用FTP上传要发送到公共ip地址的文件 用于从公共ip地址收集信息的服务器 > 有没有一种方法可以不使用FTP直接连接每台计算机,我指的是套接字?或者通过任何方式直接连接来自不同网络的两台计算机 它是否在每台计算机上使用(来自Delphi的web服务)web组件? 我真的不知道该怎么做,也不知道如何直接连接基于Delphi的P2P连接,delphi,sockets,ftp,p2p,Delphi,Sockets,Ftp,P2p,我想问的是,这是否可以直接从internet连接两个应用程序,而不使用公共ip地址作为隧道或连接器 我使用此代码从不同的网络连接连接每台计算机 客户端使用FTP上传要发送到公共ip地址的文件 用于从公共ip地址收集信息的服务器 > 有没有一种方法可以不使用FTP直接连接每台计算机,我指的是套接字?或者通过任何方式直接连接来自不同网络的两台计算机 它是否在每台计算机上使用(来自Delphi的web服务)web组件? 我真的不知道该怎么做,也不知道如何直接连接 谢谢请查看套接字单元以及TTCPCli
谢谢请查看套接字单元以及TTCPClient和TTCPServer对象:
请查看套接字单元以及TTCPClient和TTCPServer对象:
作为一个整体。做出这个答案,这样它就能够组织文本 在德尔福,你有很多沟通的方法
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综合症,重新使用一些已经建立的网络。这可能包括
等等-只需进行搜索。已经有一些成熟的网络多年来一直在处理这些挑战和初期问题,你最好重新利用他们的经验,浪费时间和精力来开发你自己的劣质(在未来几年,这将是劣质的)解决方案。做出这个答案,这样它就能够组织文本 在德尔福,你有很多沟通的方法
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;