【问题标题】:Python server TCP server accessable from anywhere (via external IP, port forwarding is done)Python 服务器 TCP 服务器可从任何地方访问(通过外部 IP,完成端口转发)
【发布时间】:2016-02-19 04:22:49
【问题描述】:

我是新来的,所以如果我很愚蠢,请不要生气 - 但我不知道。 我想做一个python TCP服务器,可以通过外部(公共)IP从任何地方访问。我在本教程的本地网络中完成了简单的服务器(它可以工作): https://www.youtube.com/watch?v=XiVVYfgDolU 客户端发送字符串,服务器发送回该字符串,但使用大写。

现在我想做同样的事情,但可以从任何地方访问。我读了很多关于它的文章。我有 Raspberry Pi,我在其中设置了静态 IP 地址并进行了端口转发(在端口 42424 上)。我只是在找一些教程,你可以在任何地方指导我——这就是我所需要的。或者你可以一步一步告诉我怎么做,但我知道写答案需要很多时间。我尝试谷歌搜索,但我没有找到任何东西。如果我这样做了,那是一个不知道外部 IP 和端口转发是什么的人,所以谈话的结尾是:了解什么是端口转发。

所以,请给我一些提示,或者指导我到某个地方。谢谢!

代码

服务器:

import socket

def Main():
    host = '10.0.0.140'
    port = 42424
    s = socket.socket()
    s.bind((host, port))

    s.listen(1)
    c, addr = s.accept()
    while True:
        data = c.recv(1024)
        if not data:
            break
        data = str(data).upper()
        c.send(data)
    c.close()
if __name__ == '__main__':
    Main()

客户:

import socket

def Main():
    host = '10.0.0.140'
    port = 42424 
    s = socket.socket()
    s.connect((host,port))
    message = raw_input("->") 
    while message != 'q':
        s.send(message)
        data = s.recv(1024)
        message = raw_input("->")
    s.close()

if __name__ == '__main__':
    Main()

【问题讨论】:

  • 您的服务器是直接连接到互联网,还是通过防火墙、路由器等?
  • 它通过以太网电缆连接到路由器。我对防火墙一无所知。
  • 路由器可能有一个正在运行的内置防火墙。您需要查看该路由器的手册以了解如何添加端口转发。路由器提供网络地址转换 (NAT),它需要知道何时从外部访问端口 42424,它应该将请求发送到哪台机器(在路由器的防火墙后面)。
  • 正如我所说,我有一个端口 - 42424 - 是端口转发的。应该这样做。我在我的路由器设置中并进行了设置。
  • 你想在你的服务器上得到什么你不能做到的?

标签: python tcp server raspberry-pi


【解决方案1】:

当连接到 NAT 防火墙/路由器后面的服务器时,除了端口转发之外,客户端还应该被定向到 路由器的 IP 地址。就客户端而言,路由器的IP地址就是服务器。路由器只是根据端口转发规则转发流量。

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 2011-06-27
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多