CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

程序如何检测在局域网中有服务器程序在运行?

楼主jjiaming(阿熊)2004-12-04 20:14:21 在 VC/MFC / 网络编程 提问

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

1 楼jjiaming(阿熊)回复于 2004-12-04 20:14:58 得分 0

在线等,分不够可以再加,问题解决后马上结帖  
  Top

2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-04 21:00:20 得分 10

扫描,可以用pingTop

3 楼laiyiling(陌生人[MVP])回复于 2004-12-04 21:10:37 得分 20

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

4 楼jjiaming(阿熊)回复于 2004-12-04 21:27:19 得分 0

楼上的办法我已经试过了,但速度太慢,而且不能检测到所有的计算机,我所希望的不仅仅是找出所有的计算机,而更重要的是检测哪 台计算机已经开启服务端程序Top

5 楼wwwllg(野蛮人)回复于 2004-12-04 21:30:06 得分 10

启动服务后,向特定的端口广播。  
  客户端不断的接收特定端口数据。Top

6 楼pclili(黑客天使)回复于 2004-12-04 21:32:24 得分 10

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

7 楼jjiaming(阿熊)回复于 2004-12-04 21:40:09 得分 0

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

8 楼HunterForPig(留着口水的猪)回复于 2004-12-04 21:41:31 得分 10

如果是局域网的话,  
  服务端每隔一定时间就向网内广播数据,  
  客户断在特定的断口不断监听  
   
  如果是不同网断。。。。。思考中:(Top

9 楼jjiaming(阿熊)回复于 2004-12-05 16:14:35 得分 0

自己up   一下Top

10 楼mingbao(★情已逝★)回复于 2004-12-05 16:26:41 得分 10

在局域网中发送到特定端口的广播包,  
  有回应则服务器在运行,否则说明服务器程序没有启动。  
   
  当然,你的服务器端程序要对这种测试标记进行识别。Top

11 楼mingbao(★情已逝★)回复于 2004-12-05 16:31:09 得分 10

每个游戏地客户端在启动后立刻向局域网中发送到特定端口的广播包,例如:192.168.0.255  
  有回应则服务器在运行,否则说明服务器程序没有启动。  
   
  当然,你的服务器端程序要对这种测试标记进行识别。  
  Top

12 楼jjiaming(阿熊)回复于 2004-12-05 23:12:29 得分 0

如何发送广播包啊,能说得具体点吗?  
  最好能给出具体的代码  
  Top

相关问题

  • 如何检测到局域网内全部DHCP服务器
  • 如何检测局域网中所有的SQL Server服务器,并显示所有服务器地址?
  • IE中的 局域网设置 中的 自动检测设置 与 代理服务器 有何区别?
  • 局域网服务器的设置!
  • 局域网问题,服务器是NT4
  • sql2000:编程实现检测局域网中已存在的已注册服务器并获取其名称?立即给分
  • 程序中如何检测正在运行的SQL Server服务器?
  • 用C#如何知道局域网中的一台服务器的数据库“服务管理器”是否开启(运行)?
  • C#写的c/s结构sqlserver数据库程序,发布的局域网其它机器运行时提示提不到Sql服务器,如何解决.
  • visual studio.net 已检测的指定的web服务器不是asp.net1.1版本 您无法运行asp.net运行程序

关键词

  • 局域网
  • 服务器
  • 检测
  • 端口
  • 计算机
  • 电脑
  • 客户
  • null
  • strfullname
  • 程序

得分解答快速导航

  • 帖主:jjiaming
  • oyljerry
  • laiyiling
  • wwwllg
  • pclili
  • HunterForPig
  • mingbao
  • mingbao

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo