2009-04-21 93 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端口。我怎樣才能在沒有端口啓用的所有計算機上創建服務器Torrent客戶端以某種方式做它。 謝謝。

回答

7

這個問題有點令人困惑,但我會盡力幫忙。基本上,如果端口(50007)被防火牆阻塞在服務器機器上,您將無法通過客戶端與其建立TCP連接。這是防火牆的目的。許多協議(例如SIP和Bittorrent)都使用防火牆和NAT導航策略,但這是一個複雜的主題,您可以使用get more information on here。您會注意到要有效使用bittorrent,您必須啓用NAT的端口轉發並取消阻止防火牆的端口範圍。此外,bittorrent對大多數數據傳輸使用tcp連接。這裏是外賣:

首先,請注意,有兩種類型的連接是BitTorrent的程序必須做:

  • 出站HTTP連接的跟蹤,通常在端口6969
  • 入境和對等機器的出站連接,通常在端口6881以上。
+0

>您必須啓用NAT的端口轉發並取消阻止防火牆的端口範圍 我可以使用python嗎?或者它不是編程的一部分? – Ockonal 2009-04-21 18:34:52

2

很難理解你的問題......

(...)洪流的客戶端做不知。

只有當路由器 - 互聯網網關設備(IGD)支持uPNP protocol時,Torrent客戶端才能做到這一點。您的問題有趣的部分是the section about NAT traversal