2009-04-21 19 views
5

接続するサーバーを作成する必要があります< =>クライアント。 サーバー:Python +ソケット

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ポートを開く必要があります。ポートを有効にせずにすべてのコンピュータにサーバーを作成するにはどうすればよいですか?トレントクライアントは何とかそれをやります。おかげさまで

答えて

7

質問はちょっと混乱しますが、私は助けようとします。基本的に、ポート(50007)がファイアウォールによってサーバーマシン上でブロックされている場合、クライアントからのTCP接続を確立できません。これがファイアウォールの目的です。多くのプロトコル(例えば、SIPやビットトレント)は、ファイアウォールとNATナビゲーション戦略を使用しますが、それは複雑な問題であり、get more information on hereです。効果的にビットトレントを使用するには、NATのポート転送を有効にし、ファイアウォールのポート範囲のブロックを解除する必要があります。また、ビットトレントは、ほとんどのデータ転送にTCP接続を使用します。ここではお持ち帰りです:

まず、BitTorrentのプログラムが行わなければならない接続の2種類があることに注意してください。

  • アウトバウンドHTTP接続をトラッカーに、通常のポートでは6969.
  • インバウンド通常はポート6881以降のピア・マシンへのアウトバウンド接続です。
+0

> NATのポート転送を有効にし、ファイアウォールのポート範囲のブロックを解除する必要があります 私はそれをPythonで行うことはできますか?それともプログラミング部分ではないのですか? – Ockonal

+0

ファイアウォールがソフトウェアベースでない限り、それはプログラム的なものではありません。これは、ネットワークsys-adminのようなものです。 –

2

あなたの質問を理解することは非常に困難...

(...)トレント・クライアントは何とかそれを行います。

トレントクライアントは、ルータ - インターネットゲートウェイデバイス(IGD) - がuPNP protocolをサポートしている場合にのみ実行できます。問題の興味深い部分はthe section about NAT traversalです。