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 端口。如何在不启用端口的情况下在所有计算机上创建服务器?Torrent 客户端以某种方式做到这一点。谢谢。

4

2 回答 2

7

这个问题有点令人困惑,但我会尽力提供帮助。基本上,如果服务器机器上的端口 (50007) 被防火墙阻止,您将无法从客户端与它建立 tcp 连接。这就是防火墙的目的。许多协议(例如 SIP 和 bittorrent)确实使用防火墙和 NAT 导航策略,但这是一个复杂的主题,您可以在此处获得更多信息。您会注意到,要有效地使用 bittorrent,您必须为 NAT 启用端口转发并为防火墙取消阻止端口范围。此外,bittorrent 使用 tcp 连接进行大多数数据传输。这是外卖:

首先,请注意 BitTorrent 程序必须建立两种类型的连接:

  • 到跟踪器的出站 HTTP 连接,通常在端口 6969 上。
  • 与对等计算机的入站和出站连接,通常在端口 6881 及以上。
于 2009-04-21T18:21:56.893 回答
2

很难理解你的问题...

(...) Torrent 客户端以某种方式做到这一点。

只有当路由器——互联网网关设备 (IGD)——支持uPNP 协议时,Torrent 客户端才能执行此操作。你的问题有趣的部分是关于 NAT traversal 的部分

于 2009-04-21T18:26:43.857 回答