ローカルネットワークを選択するコンボボックス
TCP サーバや UDP アプリなどの設定画面に登場する、バインドするネットワークアドレスを選択するコンボボックスです。はい、ものすごく限定的な Tips です。ネットワークインターフェースの列挙方法の一例、かな?
BOOL CXXXDialog::InitNetworkCombo (void)
{
char szHostName [MAX_PATH];
ZeroMemory (szHostName, sizeof szHostName);
m_ComboNetwork.Clear ();
// このコンピュータのホスト名を取得する
int nRet = gethostname (szHostName, sizeof szHostName);
if (SOCKET_ERROR == nRet)
{
// エラー処理
}
else
{
// ホスト名よりホストの情報を取得する
struct hostent* pHostEnt = gethostbyname (szHostName);
if (!pHostEnt)
{
// エラー処理
}
else
{
// INADDR_ANY を追加する
int nIndex = m_ComboNetwork.AddString (_T ("すべてのネットワーク"));
m_ComboNetwork.SetItemData (nIndex, INADDR_ANY);
// 取得したアドレスのリストをコンボボックスに追加する
for (int nCount = 0; pHostEnt->h_addr_list [nCount]; nCount ++)
{
struct in_addr Address;
memcpy (&Address, pHostEnt->h_addr_list [nCount], sizeof (struct in_addr));
nIndex = m_ComboNetwork.AddString (inet_ntoa (Address));
m_ComboNetwork.SetItemData (nIndex, Address.S_un.S_addr);
}
// ループバックを追加する
nIndex = m_ComboNetwork.AddString (_T ("127.0.0.1"));
m_ComboNetwork.SetItemData (nIndex, INADDR_LOOPBACK);
return TRUE;
}
}
return FALSE;
}
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/1288
コメント