Я запрограммировал сетевые приложения, но в основном на 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 кажется слишком сложным для того, что я на самом деле делаю, что заставляет меня поверить, что это не так, как "должно быть сделано",Я слишком привык к языкам высокого уровня, и так оно и должно быть, или я где-то пропускаю служебную функцию?
Спасибо за помощь.