Python +套接字

Max*_*rai 5 python sockets ports

我必须创建连接服务器<=>客户端.我用这段代码:服务器:

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()
Run Code Online (Sandbox Code Playgroud)

客户:

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)
Run Code Online (Sandbox Code Playgroud)

它工作正常!但是如果在没有路由器的计算机上创建服务器.如果你有路由器,在服务器创建之前你应该在你的调制解调器上打开50007端口.如何在没有端口启用的所有计算机上创建服务器?Torrent客户以某种方式做到了.谢谢.

Sha*_*son 7

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

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

  • 到跟踪器的出站HTTP连接,通常在端口6969上.
  • 到对等机器的入站和出站连接,通常在端口6881及以上.