我正在尝试在路由器后面设置服务器,并且已经能够将其减少到以下问题:
我用:
- 西门子 SL2-141 路由器。
- 带有 Python 2.7 的 Windows 7 64 位。
我跑:
服务器.py:
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((IP, 8080)) sock.listen(1) sock.accept() print 'success' sock.close()
客户端.py:
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((IP, 8080)) sock.close()
- 当 IP = '127.0.0.1'时,它可以工作。
我设置了一个静态IP:
> Network And Sharing Center > Change Adaper Settings > Local Area Connection > Properties > Internet Protocol Version 4 (TCP/IPv4) > Properties > Use The Following IP Address: IP Address: 10.0.0.200 Subnet Mask: 255.0.0.0 Default Gateway: 10.0.0.138 > Use The Following DNS Server Addresses: Preferred DNS Server: 10.0.0.138 Alternate DNS Server: - - - -
当 IP = '10.0.0.200'时,它可以工作。
我在路由器上设置了端口转发:
> http://10.0.0.138/ > Username: Admin > Password: Admin > Advanced > Virtual Server > Port Forwarding > Add: User Defined: Test From Internal Host IP Address: ALL Forward to Internal Host IP Address: 10.0.0.200 Protocol: TCP External Packet Port Start: 8080 External Packet Port End: 8080 Forward To Internal Host Port Start: 8080 Forward To Internal Host Port End: 8080 > Apply (and reboot router, just in case).
据我了解,如果我离开服务器 IP '10.0.0.200' 并将客户端 IP 设置为我的公共 IP,它应该可以工作,但它不起作用(“无法建立连接,因为目标机器主动拒绝它”) .
我尝试在 Apache 服务器上做同样的事情,结果相似:浏览 localhost 有效,浏览静态 IP 有效,但浏览公共 IP 无效(端口 80 给了我路由器设置页面,而端口 8080 只是不能'不连接)。
最后注意事项:
- 我关闭了防火墙。
- 我检查了端口是否打开(http://www.canyouseeme.org/)并且确实如此。
- 我检查了服务器是否正在监听(netstat -na | find /i "8080"),它确实在监听。
有什么想法有什么问题吗?