小弟打算做一个网络游戏,给班上的同学一起玩。首先,我们的电脑分散在几个寝室,建立了几个工作组,然后,分别通过HUB及ADSL路由器上网。我的程序需要扫描几个寝室的电脑是否有服务器程序在运行,无奈我是个菜鸟,这个对我来说,难度太大。刚才看了几个帖子(http://community.csdn.net/Expert/topic/3153/3153479.xml?temp=9.022158E-02),看得我是一头雾水。请大家帮帮忙
首先,如何在局域网内扫描所有的电脑
第二,如何扫描其他网段的电脑(我们的IP差不多)
首先,如何在局域网内扫描所有的电脑
第二,如何扫描其他网段的电脑(我们的IP差不多)
l 连接ws2_32.lib和 mpr.lib库
l #include winsock2.h
CString strTemp;
struct hostent *host;struct in_addr *ptr; // 检索IP地址 DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum( dwScope, NULL, NULL,
NULL, &hEnum );WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);if ( hEnum )
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 2048;
LPVOID Buffer = new char[2048];
WNetEnumResource( hEnum, &Count,
Buffer, &BufferSize );
NetResource = (NETRESOURCE*)Buffer; char szHostName[200];
unsigned int i; for ( i = 0;
i < BufferSize/sizeof(NETRESOURCE);
i++, NetResource++ )
{
if ( NetResource->dwUsage ==
RESOURCEUSAGE_CONTAINER &&
NetResource->dwType ==
RESOURCETYPE_ANY )
{
if ( NetResource->lpRemoteName )
{
CString strFullName =
NetResource->lpRemoteName;
if ( 0 ==
strFullName.Left(2).Compare("\\\\") )
strFullName =
strFullName.Right(
strFullName.GetLength()-2); gethostname( szHostName,
strlen( szHostName ) );
host = gethostbyname(strFullName); if(host == NULL) continue;
ptr = (struct in_addr *)
host->h_addr_list[0]; // =. 分隔开IP:211.40.35.76.
int a = ptr->S_un.S_un_b.s_b1; // 211
int b = ptr->S_un.S_un_b.s_b2; // 40
int c = ptr->S_un.S_un_b.s_b3; // 35
int d = ptr->S_un.S_un_b.s_b4; // 76 strTemp.Format("%s --> %d.%d.%d.%d",
strFullName,a,b,c,d);
AfxMessageBox(strTemp);
}
}
} delete Buffer;
WNetCloseEnum( hEnum );
}WSACleanup();
可用UDP做。
我说的正是这个意思