我已经编写了网络应用程序,但主要是在 Python 中。
我正在编写一个 C++ 应用程序,我对查找域名并连接到它的 IP 地址的确切语法有点模糊。
具体来说,我不确定如何将 gethostbyname() 调用的结果生成到套接字。
我的代码目前如下所示:
const hostent* host = GetHost(); //This works correctly
if (!host) {
DebugMessage("Bad host", "Could not resolve host");
return NULL;
}
DebugMessage("Got host", host->h_name);
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in addr;
addr.sin_family = AF_INET;
//This funky cast is what i'm concerned about
addr.sin_addr.s_addr = (*((in_addr*)(host->h_addr_list[0]))).s_addr;
addr.sin_port = htons(80);
DebugMessage("addr", (*((in_addr*)(host->h_addr_list[0]))).s_addr);
int c = connect(s, (SOCKADDR*)&addr, sizeof(addr));
int le = WSAGetLastError();
if (c == SOCKET_ERROR) {
//etc...
它确实有效,但在我看来,用于分配 s_addr 的时髦演员对于我实际正在做的事情来说似乎太复杂了,这让我相信这不是它“应该做的”方式。我是不是太习惯高级语言了,这就是它应该的方式,还是我在某个地方缺少实用功能?
谢谢您的帮助。