gpt4 book ai didi

c++ - 将机器的IP地址发送到服务器

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:36 25 4
gpt4 key购买 nike

我需要按定义的时间间隔向我的一台服务器发送一个简单的请求,比方说每 2 秒发送一次,以便告诉我的服务器我机器的 IP 地址(因为我有动态 IP 地址)。我目前正在 while 循环中执行此操作,延迟为 std::system使用 --silent 选项调用 curl 命令并将其余部分重定向到 /dev/null。像这样的 -

curl -s 'http://example.com' > /dev/null

服务器当前解析请求并从中找出所需的IP地址。还有其他方法吗?

最佳答案

另一种选择是发送一个简单的 UDP 数据报包。服务器在收到后同样可以获得发件人的地址。

与建立 TCP 连接相比,这需要的开销要少一些。当然,UDP 不提供可传递性保证,偶尔会有 UDP 数据报丢失;但是由于您定期对服务器执行 ping 操作,所以应该没问题。然而,更重要的是,UDP 发送方的 IP 地址是很容易伪造的。这是否是您的应用程序的问题只有您才能确定。

如果您要坚持使用 TCP,您可以做的一件事就是自己建立一个套接字连接。让我们检查一下执行 system() 的内容,只是为了让 curl 执行虚拟连接,涉及:

  1. fork 一个新的子进程。

  2. 执行 /bin/bash 的子进程,将要解析的命令传递给它。

  3. Bash 读取 $HOME/.bashrc,并执行其中的任何命令。如果您的 shell 不是 bash,则 shell 将有自己的等效启​​动脚本来执行。

  4. shell 派生一个新的子进程。

  5. 执行curl的子进程。

  6. 加载程序找到 curl 需要的所有库,并打开它们。

  7. curl 现在执行。只有这样,完成所有这些工作后,才会运行代码以打开套接字并尝试连接到远程主机。

第 1 步到第 6 步可以简单地跳过,只需自己创建一个套接字并连接即可。这不是火箭科学。 socket()connect()close(),就是这样。此任务不需要 HTTP。服务器进程只需要socket()bind()listen()accept() , 然后从连接中获取 IP 地址。完成。

关于c++ - 将机器的IP地址发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269428/

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