5

接続サーバー<=>クライアントを作成する必要があります。私はこのコードを使用します: サーバー:

import socket

HOST = 'localhost'
PORT = 50007      
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

クライアント:

import socket

HOST = 'localhost'   
PORT = 50007             
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

それはうまくいきます!ただし、ルーターのないコンピューターでサーバーを作成した場合。ルーターがある場合は、サーバーを作成する前に、モデムで 50007 ポートを開く必要があります。ポートを有効にせずにすべてのコンピューターでサーバーを作成するにはどうすればよいですか? トレントクライアントは何とかそれを行います。ありがとう。

4

2 に答える 2

7

質問は少し紛らわしいですが、私は助けようとします。基本的に、ポート(50007)がサーバーマシン上でファイアウォールによってブロックされている場合、クライアントからポート(50007)にtcp接続を確立することはできません。それがファイアウォールの目的です。多くのプロトコル(SIPやbittorrentなど)はファイアウォールとNATナビゲーション戦略を使用していますが、これは複雑なテーマであり、ここで詳細情報を入手できます。bittorrentを効果的に使用するには、NATのポート転送を有効にし、ファイアウォールのポート範囲のブロックを解除する必要があることに注意してください。また、bittorrentはほとんどのデータ転送にtcp接続を使用します。要点は次のとおりです。

まず、BitTorrentプログラムが作成しなければならない接続には2つのタイプがあることに注意してください。

  • トラッカーへのアウトバウンドHTTP接続(通常はポート6969)。
  • ピアマシンへのインバウンドおよびアウトバウンド接続。通常はポート6881以降。
于 2009-04-21T18:21:56.893 に答える
2

あなたの質問を理解するのは非常に難しい...

(...)Torrent-クライアントはどういうわけかそれをします。

Torrentクライアントは、ルーター(インターネットゲートウェイデバイス(IGD))がuPNPプロトコルをサポートしている場合にのみこれを実行できます。問題の興味深い部分は、NATトラバーサルに関するセクションです。

于 2009-04-21T18:26:43.857 に答える