搜索局域网设备的问题
CString str_ip1;//IP地址的四段位置
CString str_ip2;
CString str_ip3;
CString str_ip4;
CString str_SendIP;//用来给指定IP段发送字符G
CString str_i;//用来将int转化为CString
int i;
int n;
DWORD dwIP;
SOCKADDR_IN addrTo;
addrTo.sin_family=AF_INET;//套接字地址赋值,套接字m_socket为该类的全局变量
addrTo.sin_port=htons(21211);
char HostName[100];// 存放本机主机名
CString strIPAddr;//存放转换后的本机IP
gethostname(HostName, sizeof(HostName));// 获得本机主机名.
//MessageBox(HostName);
hostent* hn;//存放刚获取的IP格式
hn = gethostbyname(HostName);//根据本机主机名得到本机ip
strIPAddr=inet_ntoa(*(struct in_addr *)hn->h_addr_list[0]);//把ip换成字符串形式
n=strIPAddr.Find(".",0);
str_ip1=strIPAddr.Left(n);
strIPAddr=strIPAddr.Mid(n+1);
//MessageBox(str_ip1);
n=strIPAddr.Find(".",0);
str_ip2=strIPAddr.Left(n);
strIPAddr=strIPAddr.Mid(n+1);
//MessageBox(str_ip2);
n=strIPAddr.Find(".",0);
str_ip3=strIPAddr.Left(n);
strIPAddr=strIPAddr.Mid(n+1);
//MessageBox(str_ip3);
str_ip4=strIPAddr;
/********************************************************************
IP网段0~255通过for逐一发送字符
**********************************************************************/
for(i=0;i<256;i++)
{
str_SendIP=str_ip1+"."+str_ip2+"."+str_ip3+".";
str_i.Format("%d",i);//将int i转化为CString i
if(str_i==str_ip4)//本机的IP,跳过
str_i.Format("%d",i+1);
if(i<256)
{
str_SendIP+=str_i;
//将CString 型IP地址转化为DWORD
dwIP= ntohl( inet_addr(str_SendIP));
addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
sendto(m_socket,"G",1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
}
}
}
这是一个按钮消息响应,我的目的是搜索局域网内的设备,设备都设置了接收到字符G就回发指定的信息
但就结果却没有回发
我的for循环里面是否出错了
[解决办法]
抓包看看?
[解决办法]
我用这个方案。
1、主机以服务方式创建TCP并处于侦听
2、主机发送本机IP广播
3、设备收到广播以IP与服务端进行连接
4、服务端与客户端建立连接并传送数据。