【问题标题】:Google compute engine connecting to local UDP portGoogle 计算引擎连接到本地 UDP 端口
【发布时间】:2019-01-10 13:07:24
【问题描述】:

我有一台服务器在 google 计算引擎上侦听 UDP 端口 22000。

我可以从互联网连接,任何机器都没有问题,但我无法从本地机器连接。

完全相同的代码可以在任何其他(非 google)Linux 机器上正常运行。

我对默认计算引擎设置的唯一更改是添加防火墙规则,允许在端口 22000 传入 UDP。

欢迎任何帮助!

杰米

【问题讨论】:

  • 你绑定了什么IP地址?您使用的是0.0.0.0,还是您的网络接口地址?
  • 不是真正绑定而是设置sockname(因为它是UDP)。我试过 0.0.0.0、127.0.0.1、“localhost”和内部 IP。

标签: udp google-compute-engine ipc firewall


【解决方案1】:

解决了!

显然,在这些机器/内核中,UDP 套接字在发送之前需要有一个名称(绑定)——在我安装了服务器的其他机器上从来不需要。

所以按顺序:

套接字() 设置超时(..) 集合名称(..) 袜子发送到(..) sockrecvfrom(..)

...根据 Lua 套接字文档 (http://w3.impa.br/~diego/software/luasocket/udp.html#setsockname),我一直避免使用“setsockname”:

注意:该方法只能在任何数据报之前调用 通过 UDP 对象发送,并且只发送一次。否则,系统 自动将对象绑定到所有本地接口并选择一个 发送第一个数据报后的临时端口。当地后 地址由系统自动设置或由系统显式设置 setsockname,无法更改。

...发送是第一个操作时。

出于某种原因,这里需要它。具体来说,我已经:

setsockname( '*', 0 ) - 即绑定到所有本地地址,使用临时端口。

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 2018-12-05
    • 2022-01-01
    • 2021-01-12
    • 2018-09-02
    • 1970-01-01
    • 2019-01-24
    • 2020-10-28
    • 2022-08-24
    相关资源
    最近更新 更多