gpt4 book ai didi

Erlang:查找我的 IP 地址

转载 作者:行者123 更新时间:2023-12-04 17:46:32 27 4
gpt4 key购买 nike

我正在尝试使用 Redis 为某些部分完成负载均衡器/登录服务器/游戏服务器设置。负载均衡就是其中之一。在我的 Redis 负载平衡实例中,我使用的是有序集。关键是应用名称,成员是游戏服务器的IP地址。

这就是我的问题。我想在 erlang 中使用公共(public)方法。我找不到任何适合我需要的东西。我想知道我是否在寻找一些东西。

{ok, L} = inet:getif(),
IP = element(1, hd(L)),

给我我正在寻找的东西。我相信目前是 {192,168,0,14}。但该功能不是“公开的”。
{ok, Socket} = gen_tcp:listen(?PORT_LISTEN_GAME, [{active,once}, {reuseaddr, true}]),
{ok, {IP, _} = inet:sockname(Socket),

给我 {0,0,0,0}。我试过 inet:getaddr("owl")这给了我{127,0,1,1}。

我是否仅限于通过 TCP 发送消息并使用 inet:peername(Socket) ?获得如此简单的东西似乎很多。我的应用程序的所有不同部分都在同一台计算机上运行以进行测试。它会还给我{127,0,0,1}吗?那是行不通的。我需要将 IP 发回给用户(我的手机),以便他们可以连接到正确的服务器。环回不会做....

当前代码

我要感谢所有的回复。是的,我注意到 Lol4t0 刚过完年的评论。所以我改变了我的代码来反射(reflect)这一点。为像我这样的慢人发帖。我必须绞尽脑汁才能让这些东西点击。
hd([Addr || {_, Opts} <- Addrs,
{addr, Addr} <- Opts,
{flags, Flags} <- Opts,
lists:member(loopback,Flags) =/= true]).

最佳答案

我们已经成功地使用这个函数来获取第一个非本地 IPv4 地址:

local_ip_v4() ->
{ok, Addrs} = inet:getifaddrs(),
hd([
Addr || {_, Opts} <- Addrs, {addr, Addr} <- Opts,
size(Addr) == 4, Addr =/= {127,0,0,1}
]).

如果这是您想要的,它当然也可以更改为返回 IPv6。

关于Erlang:查找我的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32984215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com