我制作了一个简单的网络应用程序,它是通过LAN进行通信的服务器客户端。
客户端
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('q\n');
s.send('boo\n\r');
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 connecting\r\n')
c.close()
但是当服务器在NAT之后我需要在路由器中配置NAT表,我可以在没有配置路由器的情况下进行点对点连接吗?我可以在数据包本身中嵌入NAT表的信息(比如在哪个ip上重定向),这样当数据包从互联网到路由器时,它知道局域网中的哪个IP应该得到它。
答案 0 :(得分:0)
可以开发一个利用NAT Traversal技术(如STUN)在NAT设备之间创建隧道的应用程序。查看这些主题以找到适合您的解决方案。
答案 1 :(得分:-1)
是的,您确实需要配置端口转发,这通常涉及登录路由器并使用它的管理界面。不,你不能将这些信息嵌入数据包中。
但是您只需要在服务器上执行此操作和在服务器上设置端口转发后,您无需为客户端 - 服务器通信进行NAT遍历 ,因为客户端发送服务器的内容将通过服务器(因为您设置了端口转发)从服务器到客户端的回复将由客户端NAT自动转发,因为它将意识到您已建立到TCP连接服务器的终点。 这就是你可以从NAT后面连接到这个网站的方法!