我需要按照定义的时间间隔向我的某个服务器发送一个简单的请求,让我们每两秒钟说一次,以告诉我的服务器我的机器的IP地址(因为我'动态的)。我目前正在使用while循环执行此操作,std::system
调用curl命令并使用--silent
选项并将其重定向到/dev/null
。像这样的东西 -
curl -s 'http://example.com' > /dev/null
服务器当前解析请求并从中找出所需的IP地址。还有其他办法吗?
答案 0 :(得分:4)
另一种选择是发送简单的UDP数据报包。收到后,服务器可以获得发件人的地址。
这需要比建立TCP连接少一点的开销。当然,UDP不能保证可传输性,偶尔会丢失UDP数据报;但是因为你经常ping服务器应该没问题。但更重要的是,UDP发送方的IP地址是非常伪造的。这是否是您的应用程序的问题只有您可以确定。
如果您要坚持使用TCP,您可以做的一件事就是自己建立套接字连接。让我们来看看执行system()
只是为了让curl
做一个虚拟连接,涉及:
分叉新的子进程。
子进程正在执行/bin/bash
,并将命令传递给它进行解析。
Bash读取$HOME/.bashrc
,并在那里执行任何命令。如果你的shell不是bash,那么shell将有自己的等效启动脚本来执行。
shell分支新的子进程。
执行curl
的子进程。
加载程序找到curl
需要的所有库,然后打开它们。
curl
现在执行。只有这样,在完成所有这些工作之后,才会运行代码来打开套接字并尝试连接到远程主机。
只需创建套接字并自行连接,即可轻松跳过步骤1到步骤6。这不是火箭科学。 socket()
,connect()
,close()
,就是这样。此任务不需要HTTP。服务器进程只需要socket()
,bind()
,listen()
和accept()
,然后从连接中获取IP地址。完成。