我做了一个简单的网络应用程序,它是通过局域网进行通信的服务器客户端。
客户
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 8080
s.connect(("117.219.195.10", port))
s.send('qn');
s.send('boonr');
s.close
服务器
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
print host
port = 8080
s.bind(("", port))
s.listen(5)
while True:
c, addr = s.accept()
print 'Got connection from', addr
c.send('Thank you for connectingrn')
c.close()
但是当服务器落后于NAT时,我需要在路由器中配置NAT表,我可以在不配置路由器的情况下进行点对点连接吗?我可以将NAT表的信息(例如要重定向的ip)嵌入数据包本身中,以便当数据包从互联网发送到路由器时,它知道LAN中的哪个IP应该得到它。
可以开发一个利用 NAT 遍历技术(如 STUN)在 NAT 设备之间创建隧道的应用程序。查看这些主题以找到适合您的解决方案。
是的,您确实需要配置端口转发,这通常涉及登录到路由器并使用其管理界面。不可以,您不能将此信息嵌入数据包中。
但是,您只需要在服务器上执行此操作,一旦在服务器上设置了端口转发,就不需要求助于NAT遍历进行客户端-服务器通信,因为客户端发送给服务器的内容将传递到服务器(因为您设置了端口转发)从服务器到客户端的回复将由客户端NAT自动转发,因为它会知道您有一个TCP与服务器端点建立连接。这就是您从 NAT 后面连接到本网站的方式!