私はネットワーク化されたアプリケーションをプログラムしましたが、主に 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 を割り当てるためのファンキーなキャストは、私が実際に行っていることに対して複雑すぎるように思われるため、これは「行うべき」方法ではないと信じるようになりました。私は高水準言語に慣れすぎていて、これが本来あるべき姿なのか、それともユーティリティ関数がどこかに欠けているのでしょうか?
助けてくれてありがとう。