プロが教えるわが家の防犯対策術!

CSocketクラスを使用して、
簡易チャットを作成しました。
IPアドレスコントロールに、
対象コンピュータのIPアドレスを打ち込んで
チャットをしています。
対象コンピュータのIPアドレスの打ち込みを
省略して、接続されているコンピュータとチャットをしたいのですが、どうすればいいでしょうか?
コンピュータ名一覧を取得できる関数はありますか?
使用OS:Windows
開発環境:Visual C++.NET MFC です。
よろしくお願いします。

A 回答 (1件)

Dns::GetHostByName();


Dns::Resolve();
とか
勘違いしてたらすみません

この回答への補足

回答ありがとうございます。
いくつか質問したいことがあります。
Dns::GetHostByName();
というのは、MFCでも使用可能でしょうか?
-------------------------------------------
以下のソースを使用して
コンピュータ名を取得(NetBios名らしい)
しました。
しかし、Socket.Connect(Servername,Port)
としても接続できませんでした。
他のコンピュータに接続するには、
Socket.Connect(IPAddress,Port)
のようにするしかないのでしょうか?
-------------------------------------------
void CChatDlg::GetServerName()
{
LPSERVER_INFO_101 pBuf = NULL;
LPSERVER_INFO_101 pTmpBuf;
DWORD dwLevel = 101;
DWORD dwPrefMaxLen = -1;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwTotalCount = 0;
DWORD dwServerType = SV_TYPE_SERVER; // すべてのサーバー
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
DWORD i;
// このサーバーは、既定のローカルコンピュータではない。
//
if (__argc == 2)
pszServerName=__argv[1];
//
// 情報レベル 101 を指定して NetServerEnum 関数を
//呼び出し、すべてのサーバーに関する情報を取得する。
//
nStatus = NetServerEnum((LPCWSTR)pszServerName,dwLevel,(LPBYTE *) &pBuf,dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,dwServerType,NULL,&dwResumeHandle);
//
// 呼び出しが成功した場合、
//
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
if ((pTmpBuf = pBuf) != NULL)
{
//
// 各エントリをループ処理し、
// すべてのサーバータイプのデータを出力する。
//
for (i = 0; i <dwEntriesRead; i++)
{
if (pTmpBuf == NULL)
{
break;
}
char ConvStr[128];
DWORD dwLen = WideCharToMultiByte(CP_ACP,0,pTmpBuf->sv101_name,11,ConvStr,sizeof(ConvStr),"x",NULL);
ConvStr[dwLen]='\0';
List.SetArry(LIST_ME);
List.AddString(ConvStr);
//
// サーバーがドメインコントローラかどうかをチェックする
// ドメインコントローラだった場合、PDC か BDC か識別する。
//
//
// サーバーに関連付けられているコメントも出力する。
//
pTmpBuf++;
dwTotalCount++;
}
// 利用可能なエントリの一部が列挙されていない場合、
// そのことを出力し、実際に列挙されたエントリの数と、
// 利用可能なエントリの総数を出力する
}
}
}
------------------------------------------------
よろしくお願いします。

補足日時:2004/09/06 07:57
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

WNetEnumResource
gethostbyname
parent.lpRemoteName = "WORKGROUP";
parent.lpProvider = "Microsoft Windows Network";
WNetOpenEnum
等を使用して作ることができました。
感謝します。

お礼日時:2004/09/06 17:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!