C++ 如何通过套接字连接到托管网站的网站?
我正在尝试连接到我的网站,虽然我看到套接字只能连接到IPv4和IPv6,但当我使用tracert(mywebsite.000webhostapp.com)时,它会获得000webhostapp.com的域,而不是我网站的IPv4。我正在这样做:C++ 如何通过套接字连接到托管网站的网站?,c++,sockets,C++,Sockets,我正在尝试连接到我的网站,虽然我看到套接字只能连接到IPv4和IPv6,但当我使用tracert(mywebsite.000webhostapp.com)时,它会获得000webhostapp.com的域,而不是我网站的IPv4。我正在这样做: SockAddr.sin\u addr.s\u addr=inet\u addr(“MyWebsite.000webhostapp.com”) 但我只能连接到IPv4。如何连接到主机名(就像我现在做的那样)? 感谢您提供的帮助。inet\u addr()
SockAddr.sin\u addr.s\u addr=inet\u addr(“MyWebsite.000webhostapp.com”)代码>
但我只能连接到IPv4。如何连接到主机名(就像我现在做的那样)?
感谢您提供的帮助。inet\u addr()
仅解析IP地址。将查找DNS记录(IPv4(A)和IPv6(AAAA)记录,具体取决于您传入的提示)。如果mywebsite.000webhostapp.com与000webhostapp.com具有相同的IP,则表示您的网站与您的Web主机位于同一服务器上。您的网站没有专用服务器
因此,如果您不想使用复杂的c代码解析DNS名称,您可以直接与其IP连接(顺便说一句,使用ping
解析DNS名称通常比使用tracert
更快)
然后,您的网络主机将使用virtualhost来了解访问哪个网站。它使用HTTP请求中的Host
字段来确定需要哪个网站。例如,您的HTTP请求可以这样开始:
GET /index.html HTTP/1.1
Host: mywebsite.000webhostapp.com
您可以在此处查看有关虚拟主机的更多信息:没有直接的方法
inet\u addr()
函数将Internet主机地址从IPv4数字和点符号转换为网络字节顺序的二进制数据。(来自文件)
但你可以用另一种方式
首先从URL获取ip地址
首先从gethostbyname
获取hostent
结构:
struct hostent *hEnt;
hEnt = gethostbyname("MyWebsite.000webhostapp.com");
hostent
的h\u addr\u list
是指向
主机IP地址
从上述阵列获取ip地址并使用它
下面的链接有一个例子。
搜索gethostbyname
我已尝试添加此标头,但在使用您喜爱的工具(如ping)解析000webhost.app.com的DNS后,我将如何将套接字连接到该IP?请注意,gethostbyname()
已被弃用。它不是可重入的(至少在其他操作系统上是如此;Windows使用线程本地存储)。