2009-04-21 92 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