程序如何检测在局域网中有服务器程序在运行?
小弟打算做一个网络游戏,给班上的同学一起玩。首先,我们的电脑分散在几个寝室,建立了几个工作组,然后,分别通过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运行程序




