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

时间:2016-09-01 10:43:58

标签: c++ http c++11 curl networking

我需要按照定义的时间间隔向我的某个服务器发送一个简单的请求,让我们每两秒钟说一次,以告诉我的服务器我的机器的IP地址(因为我'动态的)。我目前正在使用while循环执行此操作,std::system调用curl命令并使用--silent选项并将其重定向到/dev/null。像这样的东西 -

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

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

1 个答案:

答案 0 :(得分:4)

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

这需要比建立TCP连接少一点的开销。当然,UDP不能保证可传输性,偶尔会丢失UDP数据报;但是因为你经常ping服务器应该没问题。但更重要的是,UDP发送方的IP地址是非常伪造的。这是否是您的应用程序的问题只有您可以确定。

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

  1. 分叉新的子进程。

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

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

  4. shell分支新的子进程。

  5. 执行curl的子进程。

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

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

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