美文网首页
套接字 10049 WSAEADDRNOTAVAI

套接字 10049 WSAEADDRNOTAVAI

作者: XiaXiangX | 来源:发表于2018-04-12 01:26 被阅读0次

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都试一下。这样就大功告成了,我没有将所有代码写全,如有问题,私聊或者评论都行。

相关文章

  • 套接字 10049 WSAEADDRNOTAVAI

    MFC 绑定地址 计算机内的多种IP地址带来的麻烦 转载请声明https://blog.csdn.net/m0_3...

  • ss:一个统计网络和套接字信息的命令行工具

    ss简介 ss命令可以用来统计套接字信息,它支持PACKET套接字、TCP套接字、UDP套接字、DCCP套接字、R...

  • 2018-09-12 day18网络编程

    1.socket套接字 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字 套接字编程:...

  • Mysql常用文件介绍

    套接字文件 Linux上本地连接Mysql默认采用套接字方式。套接字文件可由参数socket控制。查看套接字文件的...

  • 第十六章 网络IPC 套接字

    套接字描述 套接字是通信端点的抽象 套接字描述符:正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字 套...

  • TCP/IP协议族、Socket、HTTP的知识整理

    Socket(套接字,业余计算机从业人员表示,这是什么垃圾翻译?!套接字是个什么鬼?套接就套接,什么叫套接字?)是...

  • Python基础语法-3

    socket套接字使用流程:1.创建套接字2.使用套接字收/发数据3.关闭套接字 创建一个TCP socket 创...

  • 套接字与套接字编程

    什么是套接字(Socket)? 使用端口(Port)可以标识不同的网络进程 端口使用16个bit位表示 4个字节 ...

  • Day18-总结

    01-服务端套接字 套接字又叫套接字,指的是实现通信的两个端。等待请求的一段叫服务端套接字,发送请求的叫客户端套接...

  • 第19天总结网络通信

    socket又叫套接字,实现网络通信的两端就是套接字。分为服务器对应的套接字和客户端对应的套接字 python通过...

网友评论

      本文标题:套接字 10049 WSAEADDRNOTAVAI

      本文链接:https://www.haomeiwen.com/subject/vqvtkftx.html