写了一个UDP广播的程序,一个主机控制几个从机,主机发送广播然后接受从机的相应。过程是:主机发送一个广播后,自身也会收到一个广播,然后从机会给主机一个相应,于是主机接收消息时要加以判断是自身发送的还是来自从机。我的判断思路就是在接收到包的时候判断,receivefrom中带了消息来源的IP地址。
iRecv = recvfrom( recvp->sockSend, recvp->recvBuf, 100, 0, ( LPSOCKADDR)&(addrFrom), &(recvp->fromlen) );
addrp = inet_ntoa( addrFrom.sin_addr); //我这里得到的是 192.168.0.100,是我局域网内的地址
hostAddr = inet_addr( addrp);
然后我获得主机自身地址时用
unsigned long hostAddr;
char hostName[20]="";
PHOSTENT hostinfo;
char hostIp[20];
char *hostIP = hostIp;
int i = gethostname( hostName, 20);
if( i!=0 )
{
return -6;
}
if( (hostinfo = gethostbyname(hostName)) != NULL )
{
hostIP = inet_ntoa(*(struct in_addr*) hostinfo ->h_addr_list);//这里的IP居然是172.10.**.**,
}
hostAddr = inet_addr( hostIP);原意是用两个地址做比较的,然后判断数据包的来源,现在是哪个地址取错了?
iRecv = recvfrom( recvp->sockSend, recvp->recvBuf, 100, 0, ( LPSOCKADDR)&(addrFrom), &(recvp->fromlen) );
addrp = inet_ntoa( addrFrom.sin_addr); //我这里得到的是 192.168.0.100,是我局域网内的地址
hostAddr = inet_addr( addrp);
然后我获得主机自身地址时用
unsigned long hostAddr;
char hostName[20]="";
PHOSTENT hostinfo;
char hostIp[20];
char *hostIP = hostIp;
int i = gethostname( hostName, 20);
if( i!=0 )
{
return -6;
}
if( (hostinfo = gethostbyname(hostName)) != NULL )
{
hostIP = inet_ntoa(*(struct in_addr*) hostinfo ->h_addr_list);//这里的IP居然是172.10.**.**,
}
hostAddr = inet_addr( hostIP);原意是用两个地址做比较的,然后判断数据包的来源,现在是哪个地址取错了?
解决方案 »
- 多文档中新建视图的显示
- 大家帮忙测试一下:BitBlt函数,最后一个参数如果是SRCAND的话执行要300毫秒,如果是SRCCOPY就只要10毫秒了。
- 要用SOCKET API做一个客户端,想同时开多个连接和SERVER的一个端口收发数据,请问用什么方法比较好
- boost库
- CFile::Read读取文件出问题?
- 版本问题
- 想在文本框的关联变量中加上换行符,但不知道换行符是哪个,请赐教
- __declspec(selectany) ATL::_ATL_OBJMAP_ENTRY ... 什么意思?
- VFW视频编码问题(求助)
- RichEdit使用
- qq桌面宠物跟主人说话时弹出的聊天框是怎么实现的?
- EVC4.0 AnimateWindow的用法
我下的一段代码给你贴上:
void CListCtrl1Dlg::OnButton1()
{
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD(2, 0);
if(WSAStartup(wVersionRequested, &wsaData) == 0)
{
if(gethostname(name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list);
}
}
WSACleanup();
}
AfxMessageBox(name);//name里是本机名
AfxMessageBox(ip); //ip中是本机IP
}
http://topic.csdn.net/u/20091026/17/03a1ba39-8394-4bad-ad89-fc1aa9f12cc9.html
可以遍历一下这个数组得到内网地址