小弟打算做一个网络游戏,给班上的同学一起玩。首先,我们的电脑分散在几个寝室,建立了几个工作组,然后,分别通过HUB及ADSL路由器上网。我的程序需要扫描几个寝室的电脑是否有服务器程序在运行,无奈我是个菜鸟,这个对我来说,难度太大。刚才看了几个帖子(http://community.csdn.net/Expert/topic/3153/3153479.xml?temp=9.022158E-02),看得我是一头雾水。请大家帮帮忙
首先,如何在局域网内扫描所有的电脑
第二,如何扫描其他网段的电脑(我们的IP差不多)

解决方案 »

  1.   

    如何获取局域网上计算机名及它们的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();
      

  2.   

    比如说星际,魔兽,总得有个人建主机吧,主机建了,再都过去连撒。
    可用UDP做。
      

  3.   

    to pclili(黑客天使) :
    我说的正是这个意思