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 を使わずに各コンピュータを直接接続する方法はありますか? ソケットのことですか? または、異なるネットワークから2台のコンピューター間を直接接続する手段はありますか?

各コンピュータで (Delphi の Web サービス) Web コンポーネントを使用していますか? 何をすべきか、またはそれぞれを直接接続するオプションが本当にわかりません。

ありがとう

4

2 に答える 2

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 ライブラリを使用する

https://sourceforge.net/projects/dreamchat/のようなアプリケーションを作成して、フラットな LAN 環境で作業するのに適しているかもしれません。

ただし、(FTP タグが示唆するように) インターネットに参入したい場合は、戦略を変更した方がよいでしょう。


p2pの問題には次のものが含まれます

_1. お互いを見つける:

1a: Skype などの事前定義された 1 つのミーティング ポイント (サーバー) で

1b: E-Donkey2000 や BitTorrent などのユーザー指定のミーティング ポイント (サーバー) で

1c: Gnutella/G2 ネットワークまたはサーバーレス DHT ベースの BitTorrent を見つけるまで、インターネットの無料スキャンを使用します。

_2. 他のピアが信頼に値することを確認します。ファイル ハッシュによって保証されるファイル交換 P2P の場合 (ピアが正しいコンテンツをアップロードしている間、公正か悪意かを誰が気にするか)。コンピュータ ゲームでは、通常、いくつかの AntiCheat ツールが使用され、さまざまな成功を収めています。

_2a すべての中間ピアがあなたのデータを傍受できないようにする (または盗聴してもかまわない) こと、意図的にデータを改ざんしたり、何らかのランダム エラーが原因でデータを破壊したりできないことを保証します。あなたのプログラムによって、再送信が要求されます。

_3. 双方向通信を確立できるようにすること、つまり

_3a. あなた自身またはそれのerzatsの公的に目に見えるIPを取得する

_3b. このアドレスを未知のまだピアに伝えています

_3c. そのアドレスが実際に通信に使用される可能性があることを確認します。つまり、UDP、NatPMP、UPnP、およびその他の手法をアドホックに使用して、NAT またはいくつかのネストされた NAT をピンホールし、それらのいずれかが特定の NAT で機能するかどうかをテストします。場合によっては、IPv6/TEREDO を使用することもできます。

_3d. どのピアも動作中の「直接」パブリックアドレスを確立できなかった場合に備えて、ミラーサーバーを再変換するように適切に低下させます。

これらの問題はすべて 1 つのワームの缶詰であり、一度に解決することはできません。質問をしたり、ウィキペディアの概要やチュートリアルを検索したりして、1 つずつ対処する必要があります。


初心者への私の最善のアドバイスは、やろうとするのではなく、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 に答える