MFC中搜索局域网设备问题?

CodeInfo_ 2012-08-17 04:22:09
for(i=0;i<256;i++)
// for(i=115;i<120;i++)
{
str_SendIP=str_ip1+"."+str_ip2+"."+str_ip3+".";//自己IP的前三段,弹窗验证是正确的
str_i.Format("%d",i);//将int i转化为CString i

if(str_i==str_ip4)//本机的IP,跳过,注意是字符串与字符串相比较
str_i.Format("%d",i+1);//str_i +1 不是i+1

if(i<256)
{
str_SendIP+=str_i;//不是str_SendIP+=i,字符串与int相加结果是乱码或空白

//将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"就回发特定格式IP,然后在主窗口的新线程当中用while不断判断并接收消息。(我接入局域网的2个设备IP末尾是116和117)
结果出现了一个很奇妙的现象for(i=0;i<256;i++)没有接收到任何消息,for(i=110;i<120;i++)可以接收到116和117发过来的消息,我的理解是。。。。。。。。。。发送速度太快?接受赶不上速度?但是只有116,,117有接入局域网呀?

...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CodeInfo_ 2012-08-22
  • 打赏
  • 举报
回复
唉,现在回家了,也不好测试了,只能等几天后才能再试了,谢谢啦
[Quote=引用 9 楼 的回复:]
if(SOCKET_ERROR==retval)
break;

如果是向多个地址发送的,就可能存在多个回应的IP吧,这句是不是去掉?
另外接收线程 似乎只有强制退出的可能

lz 是不是做 ICMP 扫描 ,还是。。
[/Quote]
vcorange 2012-08-21
  • 打赏
  • 举报
回复
if(SOCKET_ERROR==retval)
break;

如果是向多个地址发送的,就可能存在多个回应的IP吧,这句是不是去掉?
另外接收线程 似乎只有强制退出的可能

lz 是不是做 ICMP 扫描 ,还是。。
CodeInfo_ 2012-08-21
  • 打赏
  • 举报
回复
不好意思,最近忙得都忘了回了

/********************************************************************
接收线程响应函数
*********************************************************************/

UINT CMyDlg::RecvProc2(LPVOID pParam)
{
//获取主线传递的套接字和窗口句柄
SOCKET socket=((recvparam*)pParam)->socket;
HWND hwnd=((recvparam*)pParam)->hwnd;
delete pParam;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
//CString str_ip;
char recvBuf[3000]="";
char tempBuf[4000]="";
int retval;
while(TRUE)
{
// AfxMessageBox("2");
//接收数据
retval=recvfrom(socket,recvBuf,3000,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;
//sprintf(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);
sprintf(tempBuf,"%s-%s",inet_ntoa(addrFrom.sin_addr),recvBuf);//消息发送方的IP转换为字符数组

// str_ip=tempBuf;
// AfxMessageBox(str_ip);这里没有反应

::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);//将内容传给主窗口

}
return 0;
}[Quote=引用 6 楼 的回复:]

你服务器端这个接收怎么写的啊??
是不是检查了一次就返回了啊?然后不检查了额??

感觉你服务器端有问题。贴代码看看
[/Quote]
Gloveing 2012-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
抓包什么意思呢?用MessageBox实现?

引用 4 楼 的回复:
在发送额时候,抓包看看
[/Quote]
抓包软件啊
傻X 2012-08-18
  • 打赏
  • 举报
回复
你服务器端这个接收怎么写的啊??
是不是检查了一次就返回了啊?然后不检查了额??

感觉你服务器端有问题。贴代码看看
CodeInfo_ 2012-08-18
  • 打赏
  • 举报
回复
抓包什么意思呢?用MessageBox实现?[Quote=引用 4 楼 的回复:]
在发送额时候,抓包看看
[/Quote]
Gloveing 2012-08-18
  • 打赏
  • 举报
回复
在发送额时候,抓包看看
CodeInfo_ 2012-08-17
  • 打赏
  • 举报
回复
难道和什么所谓的同步套接字,异步套接字有关,我使用的是同步的,但在接收消息的部分单开一个线程接收,应该也不会造成堵塞的
CodeInfo_ 2012-08-17
  • 打赏
  • 举报
回复
写错了是for(i=115;i<120;i++)
可以,范围扩大点for(i=110;i<120;i++)就不行了。。。。我也感觉程序没问题,只是这种现象太蛋疼了。。。。。
我海特是新建定时器,每隔1秒给一个IP发消息,发现for(i=0;i<256;i++)
还是不行,说明这不是处理速度的问题了。。。。。[Quote=引用 1 楼 的回复:]
for(i=110;i<120;i++)可以接收到116和117发过来的消息
那说明程序没啥问题啊
[/Quote]
Gloveing 2012-08-17
  • 打赏
  • 举报
回复
for(i=110;i<120;i++)可以接收到116和117发过来的消息
那说明程序没啥问题啊

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧