套接字 10049 WSAEADDRNOTAVAI

MFC 绑定地址 计算机内的多种IP地址带来的麻烦

转载请声明https://blog.csdn.net/m0_37147712/article/details/79906127
作者邮箱XiaXiangX@foxmail.com


在笔记本中有虚拟地址,蓝牙地址,代理地址,以太网地址等。


这里写图片描述

在MFC获取IP地址用来绑定套接字时可能会出现10049错误,使用WSAGetLastError()会显示WSAEADDRNOTAVAI。这项错误的意思是远程连接失败,原因是用户获取的IP地址不一定是以太网地址。
  看上面的图片可知,此电脑的ipv4地址在第5个,如果我填第一个IP地址,会出现如下现象。代码,和截图如下所示

char szHostName[MAX_PATH+1]  ;
    gethostname(szHostName, MAX_PATH);  //获取主机名
    hostent* phostent = gethostbyname(szHostName);  //获取主机内容
    if (phostent == NULL)
    {
        AfxMessageBox(_T("得到本机地址失败!"));
    }
char* szIP = inet_ntoa(*(in_addr*)&phostent->h_addr_list[0]);   //获取主机IP
绑定套接字失败

  如若我使用第五个地址,将h_addr_list[0]处的0改为5,则绑定套接字成功,如下图。

  
绑定成功

想必看到这里你们会想了解判断该IP为以太网地址方法,我再这里给出一个比较麻烦的方法,如果有好的方案可以在下面留言代码如下所示

void CServerChatDlg::GetiIpAddr(int i,CString &m_szServerIP)
{
    //获取IP地址
    char szHostName[MAX_PATH + 1];
    gethostname(szHostName, MAX_PATH);  //获取主机名
    hostent* phostent = gethostbyname(szHostName);  //获取主机内容
    if (phostent == NULL)
    {
        AfxMessageBox(_T("得到本机地址失败!"));
    }
    //for (int i = 0;i<10; i++)
    //{
    char* szIP = inet_ntoa(*(in_addr*)&phostent->h_addr_list[i]);   //获取主机IP
                                                                    //}
    m_szServerIP = szIP;    //在编辑框中显示IP
}

部分代码

for ( i = 0; i < 10; i++)
    {
        if (bind(m_LocalSocket, (sockaddr*)&sockAddr, sizeof(sockAddr)) == 0)
        {
            m_BindAddr.EnableWindow(FALSE);
            UpdateData(FALSE);
            MessageBox("地址和端口绑定成功!", "提示");
            break;
        }
        else
        {
            GetiIpAddr(i++,m_szServerIP);
            sockAddr.sin_addr.S_un.S_addr = inet_addr(m_szServerIP.GetBuffer(0));
        }
    }

在这里我将查找IP地址专门拿出来做了一个函数,在判断绑定成功时将每一个IP都试一下。这样就大功告成了,我没有将所有代码写全,如有问题,私聊或者评论都行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 即使百般不想再提及你,还是写下来这段文字。我本身废话较多中心不稳,写哪里算哪里了。 最近听到了中岛美嘉的,曾经我也...
    _林栖_阅读 1,508评论 0 0
  • 2018年4月11日 姓名:潘红军 公司 :扬州市方圆建筑工程有限公司 【日精进打卡第079天】 南京第349...
    5119a64ee3ab阅读 1,297评论 0 0
  • 各位T10班的天使们,大家晚上好!我是刘芳,坐标海南海口,我先介绍一下自己,我是一名努力将教与学变成一种幸...
    陶醉了醉了阅读 1,751评论 0 1
  • 总有一些人他住在你的心里,却消失在你的生活中。 那天有高中同学加我微信,我很犹豫,因为我是一个极其慢热的人,对于除...
    吾爱家阅读 3,056评论 16 5
  • 《富爸爸穷爸爸》 1穷人和富人最本质的区别是思维方式的不同。 2.改变自己,增强驾驭自己的能力。 控制对钱的欲望,...
    博妮_6de3阅读 1,067评论 0 0

友情链接更多精彩内容